アドレス帳を操作しようとしていますが、メモリ管理についての私の理解はせいぜいまあまあです。
私のプロジェクトは自動参照カウント (ARC) を使用していますが、私が学んだように、ARC は Objective-C ランドでのみ保持/解放を管理します。
私の最初の関数呼び出しは、名前ABAddressBookCreate()
に含まれるメソッドから取得しているため、「所有する」ABAddressBookRef を返すことを理解していCreate
ます。私はCFRelease
それが終わったらそれをします。
私が理解していないのは、このメソッドの過程で ABRecordRef がどのように生き続けるかです。私はしなければならないCFRetain
のではないCFRelease
ですか?を保持/解放しなかった場合にクラッシュしていた同じクラスに、ほぼ同一の別のメソッドがありABAddressBookRef
ます。
ABAddressBookRef iPhoneAddressBook = ABAddressBookCreate();
ABRecordRef record = ABAddressBookGetPersonWithRecordID(iPhoneAddressBook, self.addressBookRecordID);
NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(record, kABPersonFirstNameProperty);
NSString *lastName = (__bridge_transfer NSString*)ABRecordCopyValue(record, kABPersonLastNameProperty);
NSString *fullName = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
ABMultiValueRef phoneRef = ABRecordCopyValue(record, kABPersonPhoneProperty);
// Set up an NSArray and copy the values in.
NSArray *phoneNumberArray = (__bridge_transfer id)ABMultiValueCopyArrayOfAllValues(phoneRef);
CFRelease(iPhoneAddressBook);
// Finally, do stuff with contact information in Obj-C land..
終了の質問:最後の行CFRelease
で myを呼び出さないことでリークが発生しましたか?ABMultiValueRef phoneRef