一、概述
在IOS APP开发过程中,会使用到Core Foundation库,简称CF。如:Core Graphics,Core Text。在ARC模式下,编译器不会自动管理CF对象内存,这样,就需要我们自己管理了,当我们创建一个CF对象后,就需要使用CFRelease(CFOject)手动释放内存。如何,将OC对象和CF对象进行相互转化,要使用__bridge、__bridge_transfer、__bridge_retained。
二、使用方法
1. __bridge:在CF对象与OC对象相互转化时,此修饰只是对类型转化,不涉及对象的所有权转化。
例子:
1 NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"]; 2 CFURLRef ref = (__bridge CFURLRef)url;
上面这段代码,创建的是一个OC对象,在OC转化为CF对象时,仅涉及到了类型转化,并未涉及对象的所有权转化,所以,内存管理依然是OC下的管理方式。
2. __bridger_transfer:将一个CF对象转化为一个OC对象时,将CF对象的所有权交给OC对象,此时ARC就能自动管理该内存;(作用同CFBridgingRelease())。
3. __bridger_retained:(与__bridge_transfer相反)将一个OC对象转化为一个CF对象时,将OC对象的所有权交给CF对象管理;(作用等同于CFBridgingRetain())。
例子:
1 NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"]; 2 CFURLRef ref = (__bridge_retained CFURLRef)url; 3 CFRelease(ref);
PS:查阅资料:http://www.cnblogs.com/zzltjnh/p/3885012.html