我对bridge
和bridge_transfer
感到困惑,这是正确的吗?
-(void)getData{
ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *allPeople = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSString *name;
for ( int i = 0; i < [allPeople count]; i++ )
{
name = (__bridge_transfer NSString *) ABRecordCopyValue((__bridge ABRecordRef)[allPeople objectAtIndex:i], kABPersonFirstNameProperty);
}
CFRelease(addressBook);
allPeople = nil;
}
有谁可以向我解释如何使用它们?
最佳答案
如果您打开了自动引用计数(ARC),则代码正确。
语句中有两个__bridge_transfer
。结果,创建的CFObject的所有权将转移到NSObjects。如果您打开了ARC,它们将自动释放。如果您对这2条语句使用__bridge
代替,则需要显式调用CFRelease
以释放由*Copy
API创建的CFObject。__bridge
语句也是正确的。因为您在CF API中引用了NSObject。您没有转让所有权,因此ARC将其释放。