我很困惑bridge
和bridge_transfer
,这是正确的吗?iOS桥vs 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;
}
有没有人能解释我如何使用它们?
thx,你能解释一下什么是“转让所有权”? – Rinat 2012-03-25 11:10:16
所有权是内存管理中一个重要的关键概念。对象的“所有者”负责释放其内存。如果它没有做到这一点,对象将会泄漏。一个对象可以有多个所有者,所以在这种情况下,超出范围的最后一个所有者负责解除分配。 ARC会自动执行此操作,但仅适用于Objective-C对象。 CoreFoundation对象是香草C对象,所以你需要给编译器提示如何处理它们。如果您将“所有权”转让给ARC,那么您认为ARC有责任解除分配该对象。 – borrrden 2012-03-25 11:25:06
抱歉,迟到的回应。所有权主要是由谁来负责释放对象。如果您想了解详细信息,请参阅[所有权政策](https://developer.apple.com/library/mac/#documentation/CoreFOundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html)。 – 2012-03-25 14:59:32