2011-07-10 27 views
1

我想覆蓋在UIViewController子類中的setter setView,原因是在UIViewController中的setView autoreleases視圖,我想自己處理內存管理。uiviewcontroller中的setView方法是如何實現的?

我試圖重寫的setView低於我的setView:

-(void)setView:(UIView *)view 
{ 
if (_view != view) 
    { 
    [_view release]; 
    _view = [view retain]; 
    } 
} 

但是,編譯器似乎找不到_view伊娃,所以即時通訊好奇,想知道什麼UIViewController中的二傳手的setView樣子?或者我可以自己處理視圖屬性的記憶嗎?

+1

爲什麼你想這樣做嗎? – jtbandes

+0

我的viewcontroller有一個自定義的視圖,它有一個渲染循環,並嘗試訪問已經釋放的變量。所以我試圖釋放這個視圖之前,它這樣做。 – valmo

+1

正常的做法是在發佈時刪除這些變量,然後在訪問它們時檢查零,否?那麼如果他們是零,你可以取消渲染循環。 – mackworth

回答

1

看起來應該大致是這樣的:

-(void)setView:(UIView *)view 
{ 
    if (_view != view) 
    { 
     [_view release]; // Release _view, not view 
     _view = [view retain]; 
    } 
} 
+0

是否有一個autorelease部分?根據我的理解視圖被添加到autorelease池 – valmo

+0

另一種方法可以:'[_view autorelease]; _view = [view retain]'沒有if語句。 –

0

您可以在設置之前始終保留該視圖。它不會自動釋放,直到裁判數< 1.

+0

即時通訊實際上試圖釋放它之前獲得autoreleased – valmo

相關問題