2012-07-02 26 views
0

我的一個視圖控制器已關閉ARC,但是當我導航到先前的視圖控制器時,我的dealloc方法沒有被調用。爲什麼在ARC打開項目時dealloc沒有被調用,但是關閉了某個文件目標c?

對於推視圖控制器我用

Magazine_ArticleViewController_iPhone *viewController = [[Magazine_ArticleViewController_iPhone alloc] 
                 initWithNibName:@"Magazine_ArticleViewController_iPhone" 
                 bundle:[NSBundle mainBundle]]; 

viewController.hidesBottomBarWhenPushed = YES; 

IssueDataHolder *dataHolder = [m_arrIssueData objectAtIndex:m_nCurrentIssueIndex]; 

NSLog(@"%d",dataHolder.nIssueID); 

[viewController setM_IssueDataHolder:dataHolder]; 
[self.navigationController pushViewController:viewController animated:YES]; 
[viewController release]; 

和導航我用

[self.navigationController popViewControllerAnimated:YES]; 
+0

請現在看到更新的問題? –

+4

東西對你的視圖控制器有很強的參考價值。 –

+0

可能在更早的類ARC中,所以雖然pushViewContrioller我們不釋放推視圖控制器對象的內存,可能是多數民衆贊成爲什麼在推視圖控制器dealloc沒有被調用 –

回答

0

我Magazine_ArticleViewController_iPhone視圖控制器的dealloc中沒有得到所謂的,因爲在一個視圖控制器(其中我正在推動Magazine_ArticleViewController_iPhone視圖 - 控制),我帶着保留產權的委託。當我做了@「分配」,然後dealloc被炒魷魚。

我完全同意@Paul de Lange的評論。

更改了代表的保留屬性以指定

1

對於開發誰仍然有問題,以前的視圖控制器的dealloc不會調用和無法找出原因: 根據保羅的回答[performSelector:withObject:afterDelay:]可能是這個問題的原因。 您必須在推送新的ViewController之前取消[performSelector:]

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(Method) object:nil]; 
+0

僅當發送選擇器尚未執行時才這樣嗎? –

+0

我想,是的,如果有一個方法,它會在延遲一段時間後用選擇器執行,另一個ViewController在這個方法之前被推送,dealloc不會被調用。 – sag

相關問題