2011-01-11 35 views

回答

2

那麼,如果被示出的圖,然後隱藏,它會收到兩者initWithNibName然後release;所以你應該做的是這樣的:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    yourArray = [[NSArray alloc] init]; 
} 

- (void) dealloc 
{ 
    [yourArray release]; 
    [super dealloc]; 
} 

無論視圖控制器的生命的短暫,它仍然會在收到被解僱的釋放,這反過來將最終導致dealloc被調用。

2

它是正確的,只有確保將它釋放到您的dealloc。確保當你的Alloc INITING你不使用你的制定者,而不是你要的Alloc初始化實例變量直接:

_myArray = [[NSArray alloc]init]; 

,如果你想只通過屬性方法去那麼做這樣的事情:

self.myArray = [NSArray array]; 

,並再次,不要忘了釋放它在你的dealloc:

-(void)dealloc 
{ 
    [_myArray release]; 
    [super dealloc]; 
} 
+0

爲什麼should't用我的二傳手?謝謝 – xger86x

+0

因爲如果你有一個「保留」(你可能有)或「複製」屬性,那麼如果你在分配initing時使用setter,那麼這個對象將被保留兩次:1.在alloc方法。 2.在你的二傳手。這會導致你的記憶泄漏,因爲你只調用一次「釋放」。 (並且你應該只調用一次釋放。)所以,如果你想使用setter,獲得一個autoreleased對象。 –