// 공유 주소록의 인스턴스를 가져옵니다. 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];
할당되지만 내부에있는 모든 객체는 유지되지 않습니다. 나는 속성이 아닌 다른 배열을 사용했고 객체는 잘 유지되었습니다. 하지만 문제는 값을 포함하는 전역 속성이 필요하다는 것입니다.
업데이트 :
그 문제에 대한 해결책을 발견했다. 나는 분석을 실행하고 심판도 계산했는데, 메모리 누출이없는 지점까지 도달했습니다. 그러나 문제는 남아 있었고 재산의 이름 때문이었습니다.
"연락처"는 "연결을 시작하고 들어오는 연결 요청을 관리하는 데 사용할 수있는 MIDI 네트워크 호스트 집합"에 대한 기본 제공 속성입니다.
나는 나의 재산을 유일한 이름으로 지었고 모든 문제는 사라졌다. 정적 변수에 대한 필요성은 없습니다. 그리고 저는이 변수를 사용하여 내 객체에서 어떤 일이 벌어지고 있는지를 알기 위해 테스트에 사용하고있었습니다. 정적 변수가 작동하는 이유는 그것이 고유하게 명명 되었기 때문입니다.
질문에 대한 답변은 괜찮지 만 다른 사람의 기존 답변의 수정으로 사용하지 마십시오. –
내 사과, 다음 번에 기억할 것입니다. – Toret