今天在整理以前的一些琐碎知识,今天就分享一个Foundation与coreFoundation的相互转换细节问题,其中的引用计数器是需要考虑的方面。
ARC
环境下,CoreFoundation
框架中的对象依然要使用手动引用计数管理,手动内存管理的原则为:凡是使用的函数中出现了了copy
,retain
,create
获取的对象,都必须有调用一次CFRelease
函数来释放对象。CoreFoundation—>Fundation
- __bridge 可于 Fundation <-> CoreFoundation的相互转换 只负责转换类型,但并不转移对象的所有权(也就是不影响引用计数器).
- __bridge_transfer 只能把CoreFoudation对象转换为Foundation的对象,同时转移对象的所有权
- CFBridgingRelease 与 __bridge_transfer 等价,源代
Foundation—>CoreFoundation
- __bridge_retained 只能把Foundation的对象转换为CoreFoundation中的对象,同时让CoreFoundation中对象负责管理对象生命周期
- CFBridgingRetain 与 __bridge_retained 等价,源代码