2011-07-12 98 views
-2

我是新的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); 
+0

爲什麼不使用xcode中的內存泄漏查找器? – Sauleil

+0

我用過,但我沒有得到bcz即時通訊新的技術 – Maidul

回答

2

您正在使用ABRecordCopyValue上firstName和lastName這意味着你需要CFRelease那些爲好。

+0

海,我釋放這兩個firstName和lastName應用程序崩潰......所以請幫助我....... – Maidul

+0

您需要在'NSLog(@「Name%@」,contact.contactName)後面加'CFRelease';'你在哪裏發佈它? – Joe

0

您需要添加:

CFRelease(firstName); 
CFRelease(lastName); 
+0

海,我釋放這兩個名字和姓氏應用程序崩潰......所以請幫助我....... – Maidul

1

CFRelease是很長的路要走(如@Joe和@jamapag已回答)。我只想補充一點的XCode有一些不錯的功能,如CMD + SHIFT + a給出了一個靜態內存分析器..你也可以使用運行 - >運行w /性能工具,然後使用分配或泄漏來動態分析我們的內存管理。

+0

感謝您的suggestions.i將檢查一次 – Maidul