Узнать утечку памяти? - PullRequest
0 голосов
/ 12 июля 2011

Я новичок в приложениях для iphone. Теперь это мое первое приложение, приложение установлено, но не запущено? Я пишу этот код, он показывает утечку памяти. Пожалуйста, узнайте. Спасибо заранее.

ABRecordRef ref = CFArrayGetValueAtIndex(all, i);

CFStringRef *firstName = (CFStringRef *)ABRecordCopyValue(ref, kABPersonFirstNameProperty);
NSLog(@"Name %@", firstName);
contact.strFirstName = (NSString*)firstName;

CFStringRef *lastName = (CFStringRef *)ABRecordCopyValue(ref, kABPersonLastNameProperty);
NSLog(@"Name %@", lastName);
contact.strLastName = (NSString*)lastName;
contact.contactName = [NSString stringWithFormat:@"%@ %@",(NSString *)firstName,lastName];
NSLog(@"Name %@", contact.contactName);

ABMutableMultiValueRef phoneNumbers = ABRecordCopyValue(ref, kABPersonPhoneProperty);
for(CFIndex j = 0; j < ABMultiValueGetCount(phoneNumbers); j++)
{
    CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phoneNumbers, j);

    NSString *phoneNumber = (NSString *) phoneNumberRef;
    contact.strMobileNo = phoneNumber;
    NSLog(@"phoneNO is %@", phoneNumber);

    CFRelease(phoneNumberRef);

}       

ABMultiValueRef emails = ABRecordCopyValue(ref, kABPersonEmailProperty);
for(CFIndex k = 0; k < ABMultiValueGetCount(emails); k++)
{
    CFStringRef emailRef = ABMultiValueCopyValueAtIndex(emails, k);
    NSString *mailid = (NSString *) emailRef;
    contact.strMail = mailid;
    NSLog(@"Email is %@", mailid);

    CFRelease(emailRef);

}

CFRelease(emails);
CFRelease(phoneNumbers);

Ответы [ 3 ]

2 голосов
/ 12 июля 2011

Вы используете ABRecordCopyValue для firstName и lastName, что означает, что вам также нужно CFRelease.

1 голос
/ 12 июля 2011

CFRelease - это то, что нужно (как @Joe и @jamapag уже ответили). Я просто хотел бы добавить, что в XCode есть несколько полезных функций, таких как cmd + shift + a, который дает статический анализатор памяти. И вы также можетеиспользуйте run -> run w / performance tools, а затем используйте выделения или утечки для динамического анализа нашего управления памятью.

0 голосов
/ 12 июля 2011

Вам нужно добавить:

CFRelease(firstName);
CFRelease(lastName);
...