2010-08-09 77 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