我很困惑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