2010-08-09 74 views
1

我遇到iPhone装置上执行以下代码有些奇怪内存泄漏:需要帮助修复iPhone内存泄漏!

@implementation TestViewController 
@synthesize myButton; 

- (IBAction)buttonPressed { 
    ABPeoplePickerNavigationController* selectContactViewController = nil; 

    selectContactViewController = [[ABPeoplePickerNavigationController alloc] init]; 
    selectContactViewController.peoplePickerDelegate = self; 
    [self presentModalViewController:selectContactViewController animated:YES]; 
    [selectContactViewController release]; 
} 

释放完成的选择器简单如下:

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker { 

    [self dismissModalViewControllerAnimated:YES]; 
} 

仪器标记“selectContactViewController = [[的ABPeoplePickerNavigationController的alloc] INIT]; “作为泄漏。任何想法为什么?

回答

0

你可能想建立像这样的选取器控件:

ABPeoplePickerNavigationController* selectContactViewController = nil; 

selectContactViewController = [[[ABPeoplePickerNavigationController alloc] init] autorelease]; 
selectContactViewController.peoplePickerDelegate = self; 
[self presentModalViewController:selectContactViewController animated:YES]; 

当你目前的模态视图控制器,它将保留在自己的看法。这就是它仍然可以将视图控制器的一个实例传递给你的委托。最好的办法是将视图控制器设置为autoreleased,所以当它从导航控制器中弹出时,NSAutoReleasePool会将其垃圾收集。

+0

引用计数不是垃圾收集。 iPhone OS不会做垃圾收集。 – 2010-08-09 18:44:23

+0

你是正确的TC,但我仍然尝试使用autorelease,但没有工作... 我在3.1.3测试是否有可能在该操作系统版本泄漏? – Joshua 2010-08-09 19:52:00

0

只是一个评论 - 你使用任何协议如UINavigationControllerDelegate在接口声明?

我遇到了这种情况,只是引用此协议导致了类似的泄漏消息。

+0

我正在使用ABPeoplePickerNavigationControllerDelegate协议,但即使只是为了验证它没有导致泄漏的唯一目的,我看不到如何不包括它...... – Joshua 2010-08-13 21:29:08