我正在尝试使用地址簿,但我对内存管理的理解充其量只是马马虎虎。
我的项目正在使用自动引用计数 (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