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方法

后续我们会根据具体的业务逻辑,具体介绍上面的三种类型转换关键字.


上一篇下一篇

猜你喜欢

热点阅读