2011-04-03 111 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