Core Foundation 对象的内存管理(一)
2017-03-28 本文已影响41人
奋斗的DevAmos
1. 底层的CoreFoundation对象,大多数以XxxCreatteWithXxx这样的方式创建
// 创建一个CFStringRef 对象
CFStringRef str = CFStringCreateWithCString(kCFAllocatorDefault, "hello world", kCFStringEncodingUTF8);
// 创建一个CGFontRef
CGFontRef fontRef = CGFontCreateWithFontName((CFStringRef)@"ArialMT");
//对于这些对象的引用计数的修改,要相应地修改CFRetain和CFRelease
// 引用计数加1
CFRetain(fontRef);
// 引用计数减1
CFRetain(fontRef);
2.在ARC下,我们有时需要将一个Core Foundation对象转换成一个Object-C对象,这就引入了与bridge相关的关键字,以下是这些关键字的说明
1.__bridge:只做类型转换,不修改相关对象的引用计数,原来的Core Foundation对象不用时,需要调用CFRelease方法;
2.__bridge_retained:类型转换后,将该对象的引用计数加1,原来的Core Foundation对象不用时,需要调用CFRelease方法;
3.__bridge_transfer:类型转换后,将该对象的引用计数交给ARC管理,Core Foundation对象在不用时,不再需要调用CFRelease方法
后续我们会根据具体的业务逻辑,具体介绍上面的三种类型转换关键字.