内存管理问题

时间:2011-04-03 09:27:50

标签: objective-c ios memory-management

以下是示例代码,我正在尝试将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之后实现了它。在哪里我可能会出错。 任何帮助,请.....

2 个答案:

答案 0 :(得分:0)

奇怪,这看起来不像是泄密给我,听说乐器(很少)报告漏报。

编辑:忘记后面的内容并改为阅读bbum评论:)

您可以尝试删除[picker release],然后使用autorelease代替:

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

然后看看仪器是否仍然报告泄漏?如果没有,请保留原始代码并忽略该错误警报......

这几乎相同,但使用NSAutoReleasePool可能会改变乐器行为。

请注意,像你一样明确发布的方法比自动释放更清晰。

答案 1 :(得分:0)

这里似乎有一个奇怪的SDK错误...请阅读官方Apple开发论坛here以获取更多信息和解决方案。