RSS

Tag Archives: ARC

ARC forbids explicit message send of ‘retain’ ‘release’ ‘autorelease’ ‘dealloc’ ‘retainCount’

之前写了一篇ARC forbids explicit message send of ‘dealloc’的解决方案 ,看到很多朋友不是搜索dealloc而是搜索retain, release过来的,这里一起解答一下。

ARC forbids explicit message send of ….从字面意思上也很好理解,ARC禁止显式(直接)发送retain, release, dealloc…等消息。其实就是使用ARC之后,不允许直接调用retain, release, autorelease, dealloc, retainCount这些方法了,编译器会在合适的地方将这些代码添加进去,解决这样的问题只需要删除与手动管理内存相关的代码(一般就是报错的代码)即可。

习惯了手动管理内存的朋友可以选择禁用ARC,如果想体验ARC带来的编码上的便捷,可以先看一下下面列出的文档:

https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

 


 
添加留言

Posted by on 四月 9, 2012 in iOS

 

Tags: , , , ,

__bridge,__bridge_retained和__bridge_transfer的意思,区别与使用

使用ARC能帮我们减轻不少内存管理方面的负担,尤其是对用惯了Java的程序员来说。但是像我这种Java基础本身就不牢固,做了两年的iOS已经习惯手动管理内存的半吊子,使用ARC还是经常碰壁。

最近碰到了CFObject和NSObject转换的问题,由于ARC不能管理Core Foundation Object的生命周期,所以在Core Foundation和ARC之间,我们需要使用到__bridge,__bridge_retained和__bridge_transfer三个转换关键字。

根据苹果官方的文档(https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html):

__bridge只做类型转换,但是不修改对象(内存)管理权;

__bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象;

__bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。

 
添加留言

Posted by on 三月 20, 2012 in Objective-C

 

Tags: , , , , , ,