2012-01-26 81 views
1

我有一個關於ARC的簡單問題。如果用戶在UIViewController中使用addSuperView輕擊按鈕,則會顯示一個UIView。 UIView包含一個關閉按鈕,如果點擊我想刪除視圖。iOS SDK:ARC removeFromSuperview

我用動畫視圖屏幕外後致電的UIViewController中的一個方法:

- (void)viewDidClose:(UIView *)view 
{ 
    [view removeFromSuperview]; 
    [view release], view = nil; 
} 

現在使用ARC,我把它改爲:

- (void)viewDidClose:(UIView *)view 
{ 
    [view removeFromSuperview]; 
    view = nil; 
} 

現在的問題是:我想刪除協議和委託給視圖控制器,並在UIView本身內部完成。

弧前(內視圖):

- (void)didStop 
{ 
    [self removeFromSuperview]; 
    [self autorelease]; 
} 

我不能在ARC使用「自動釋放」也不是成立不久的自我=零「,因爲據我所知ARC進來的地方,因爲我將視圖設置爲零或將其替換,但如果我不更換它,該怎麼辦?是[查看removeFromSuperview]足以照顧一切或泄漏?

非常感謝!我感謝任何幫助!

回答

0

(請注意,在您的非ARC版本中,您需要之前的autorelease)。

我想知道類似的事情。 '危險'是當你在沒有首先執行autorelease的情況下執行removeFromSuperview時,即使在方法結束之前,該對象也會立即解除分配。這太瘋狂了。

我的想法是,你會讓方法返回self。在非ARC的情況下,你可以用autorelease創建這個指針,但是ARC應該爲你做。你可能不需要調用者的指針,但我相信這會迫使ARC做你想做的事。