3. Core Foundation 对象的内存管理
ARC 是编译器特性,他不是运行时特性,更不是垃圾回收器「GC」。
ARC 能够解决 iOS 开发中90%的内存管理问题,但是另外10%的内存管理问题是需要开发人员自己处理的,这主要是与底层 Core Foundation 对象交互的部分,底层 Core Foundation 对象由于不在 ARC 的管理下,所以需要自己维护这些对象的引用计数。
实际上 Core Foundation 对象使用的 CFRetain 和 CFRelease 方法,可以认为与 Objective-C 对象的 retain 和 release 方法等价,所以我们可以以 MRC 的方式进行类似管理。
3.1 在 ARC 中,通过什么方式可以把 Core Foundation 对象转换为 Objective-C 对象呢?
转换的过程,其实是告诉编译器,对象的引用计数如何调整。
这里我们可以使用桥接「bridge」相关关键字来进行转换工作,以下是这些(双下划线)关键字的说明:
(1)__bridge:只做类型转换,不修改相关对象的引用计数,原来的 Core Foundation 对象在不用时,需要调用 CFRelease 方法。
(2)__bridge_retained:类型转换后,将相关对象的引用计数加1,原来的 Core Foundation 对象在不用时,需要调用 CFRelease 方法。
(3)__bridge_transfer:类型转换后,将相关对象的引用计数交给 ARC 管理,原来的 Core Foundation 对象在不用时,不需要调用 CFRelease 方法。
我们根据具体的业务逻辑,合理使用上面的三种转换关键字,就可以解决Core Foundation 对象 与 Objective-C 对象相对转换的问题了。
注:相关教程知识阅读请移步到IOS开发频道。











