//獲取共享地址簿的實例 ABAddressBookRef addressBook = ABAddressBookCreate();爲什麼我的nsmutablearray屬性不保留對象?
//get all contacts in addressbook
CFArrayRef allContacts = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex numPeople = ABAddressBookGetPersonCount(addressBook);
self.contacts = [NSMutableArray array];
//modify data to be stored in an array
for (int i = 0; i < numPeople; i++) {
AddressBookPerson *person = [[AddressBookPerson alloc] init];
ABRecordRef ref = CFArrayGetValueAtIndex(allContacts, i);
NSString *firstName = (NSString *)ABRecordCopyValue(ref, kABPersonFirstNameProperty);
NSString *lastName = (NSString *)ABRecordCopyValue(ref, kABPersonLastNameProperty);
ABMultiValueRef phoneNumberProperty = ABRecordCopyValue(ref, kABPersonPhoneProperty);
NSArray* phoneNumbers = (NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProperty);
CFRelease(phoneNumberProperty);
NSString *contactFirstLast = [NSString stringWithFormat: @"%@, %@", firstName, lastName];
person.name = contactFirstLast;
person.phoneNumbers = phoneNumbers;
[self.contacts addObject:person];
//self.contacts = [NSArray arrayWithArray:listOfContacts];
[contactFirstLast release];
[person release];
}
我不知道爲什麼這個屬性不保留。我甚至嘗試過嘗試變化,如:
self.contacts = [[NSMutableArray alloc] init];
它被分配,但我放置在裏面的任何對象都不會被保留。我使用了一個不同的數組,它不是屬性,對象保留得很好。但問題是我需要一個全局屬性來包含值。
UPDATE:
我找到了解決問題的辦法。我跑分析,並做了參考計數,我知道它沒有內存泄漏。但問題仍然存在,這是因爲財產的名稱。
「contacts」是「可用於啓動連接和管理傳入連接請求的一組MIDI網絡主機」的內置屬性。
我給自己的房產命名了一個獨特的名字,所有的問題都消失了。沒有必要使用靜態變量,我明白,我正在使用該變量進行測試,以查看我的對象發生了什麼。靜態變量的工作原因是因爲它是唯一命名的。
可以回答你自己的問題,但請不要將它作爲對別人現有答案的編輯。 –
我的道歉,請記住下次。 – Toret