bridge
とbridge_transfer
と混同していますが、これは間違いありませんか?iOSブリッジと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
所有権は、メモリ管理における重要な主要概念です。オブジェクトの「所有者」は、そのメモリを解放する責任があります。これを実行できない場合、オブジェクトはリークします。オブジェクトは複数の所有者を持つことができます。そのため、範囲外になった最後の所有者がこの場合の割り当て解除を行います。 ARCはこれを自動的に行いますが、目的のCオブジェクトに対してのみ自動的に行います。 CoreFoundationオブジェクトはバニラCオブジェクトであるため、コンパイラに対処する方法についてのヒントを与える必要があります。あなたがARCに「所有権を譲渡する」場合、そのオブジェクトの割り当てを解除するのはARCの責任であると言います。 – borrrden
返答が遅れて申し訳ありません。所有権は、主にオブジェクトを解放する責任を負うものです。詳細については、[オーナーシップポリシー](https://developer.apple.com/library/mac/#documentation/CoreFOundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html)を参照してください。 –