标签:
很多时候都会使用到CoreFoundation的函数,其返回值为CoreFoundation框架的对象,如果想转换为Foundation框架的对象就可以使用桥接方式来搞定。
示例代码:
CFStringRef firstname = ABRecordCopyValue(person, kABPersonFirstNameProperty); CFStringRef lastname = ABRecordCopyValue(person, kABPersonLastNameProperty); NSString *firstName = (__bridge NSString *)(firstname); NSString *lastName = (__bridge NSString *)(lastname);
但是使用这种桥接方式就有可能会出现内存泄露。
在ARC模式下使用CoreFoundation的函数都需要考虑到内存泄露问题,上面的桥接方式仅仅是将CoreFoundation框架的对象所有权交给Foundation框架来使用,并不能管理该对象的内存,如果我们想管理该对象内存就使用另外一种桥接方式即可。
示例代码:
NSString *firstName = (__bridge_transfer NSString *)(firstname);
NSString *lastName = (__bridge_transfer NSString *)(lastname);
使用__bridge_transfer Objective-C type这种桥接方式,以后就不用再自己手动管理内存了!
标签:
原文地址:http://www.cnblogs.com/iOS-eflying/p/5931921.html