2011-04-03 127 views
0

下面是一個示例代碼,我正在嘗試將iphone的聯繫人導入到我的應用程序中。內存管理問題

-(IBAction)import_Clicked:(id)sender{ 

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; //leaking here 
picker.peoplePickerDelegate = self; 
// Display only a person's phone, email, and birthdate 
NSArray *displayedItems = [NSArray arrayWithObjects:[NSNumber numberWithInt:kABPersonPhoneProperty], 
          [NSNumber numberWithInt:kABPersonEmailProperty], 
          [NSNumber numberWithInt:kABPersonBirthdayProperty], nil]; 


picker.displayedProperties = displayedItems; 
[self presentModalViewController:picker animated:YES]; 
[picker release];} 

我在儀器上運行它,它顯示我100%泄漏在我分配abpeoplepickernavigationcontroller行。我在persentmodalviewcontroller後發現它。我還能在哪裏出錯。 任何幫助,請.....

+0

這是直接從Apple的[QuickContacts](http://developer.apple.com/library/ios/#samplecode/QuickContacts/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009475-Intro- DontLinkElementID_2)項目,不是嗎? – 2011-04-03 09:35:27

+0

是的,它是QuickContactsViewController.m> http://developer.apple.com/library/ios/#samplecode/QuickContacts/Listings/Classes_QuickContactsViewController_m.html#//apple_ref/doc/uid/DTS40009475-Classes_QuickContactsViewController_m-DontLinkElementID_6 – 2011-04-03 09:37:55

回答

0

在這裏似乎有一個奇怪的SDK錯誤...有關更多信息和解決方案的官方Apple開發論壇here的閱讀。

+0

該論壇帖子不是一個解決方案,它只是以漏洞無法識別的方式(因爲對象仍然從對象的根圖中引用)泄漏更多內存來掩蓋問題。 – bbum 2011-04-03 19:04:01

+0

不僅如此,這不是官方的蘋果開發論壇。如果是這樣,我懷疑其中一位蘋果工程師會注意到「解決方案」是多麼的錯誤,並且會評論。 – bbum 2011-04-03 19:25:03

+0

感謝您輸入的圖片。關於這個問題可能在這裏的任何輸入? – mmccomb 2011-04-03 19:58:11

0

奇怪的是,這看起來不像泄漏給我,聽說儀器(很少)報告錯誤的泄漏。

編輯:忘記了如下讀bbum評論,而不是:)

能否請您嘗試刪除[picker release]然後用autorelease代替:

BPeoplePickerNavigationController *picker = [[[ABPeoplePickerNavigationController alloc] init] autorelease]; 

再看看的儀器仍報告泄漏?如果沒有,請保留您的原始代碼並忽略該錯誤警報...

這幾乎相同,但使用NSAutoReleasePool可能會改變Instruments的行爲。

請注意,明確釋放像你一樣是一種比自動釋放更清潔的方法。

+0

The Leaks instrument顯示泄漏物體的創建位置,而不是泄漏的位置。泄漏在其他地方是過度保留的(因爲代碼中的保留和發佈是平衡的)。 – bbum 2011-04-03 17:52:51

+0

@bbum,感謝您使用儀器的方式。順便說一句,任何有趣的鏈接到它如何檢測泄漏的細節? – 2011-04-03 18:38:12

+0

它掃描內存並識別從全局變量或堆棧中可訪問的任何地方不再引用該對象的任何對象。 – bbum 2011-04-03 19:01:17