2010-02-11 73 views
3

一個簡單的問題,在viewDidUnload之後dealloc是否也被調用?我問關於pickerData,這是我的理解,當dealloc被調用時,變量將被釋放。我詢問的原因是我在一本書中注意到作者在viewDidUnload中將pickerData設置爲nil。這是無害的矯枉過正,甚至可能是好的做法,或者是沒有任何情況下沒有其他人不會被召喚的情況。dealloc在viewDidUnload之後被調用嗎?

接口:

@interface SingleViewController : UIViewController { 
    NSArray *pickerData; 
} 
@property(nonatomic, retain) NSArray *pickerData; 
@end 

IMPLMENTATION:

-(void)viewDidUnload { 
    [self setSinglePicker:nil]; 
    [self setPickerData:nil]; 
    [super viewDidUnload]; 
} 

-(void)dealloc { 
    NSLog(@"Here"); 
    [singlePicker release]; 
    [pickerData release]; 
    [super dealloc]; 
} 
@end 

加里

回答

6

沒有,viewDidUnload:一個UIViewController的觀點被釋放時被調用。只有在UIViewController的引用計數爲零時纔會調用dealloc:。作者的代碼是很好的做法。

作者正在使用合成方法將ivars設置爲零,這意味着這些ivars會發送釋放消息。 viewDidUnload:你應該在哪裏發佈任何對象或內存,你可以很容易地重新創建。作者基本上是這樣說的:「我不再需要引用這些東西了,減少了保留數,希望這會釋放一些內存。如果需要的話,稍後我會在viewDidLoad中重新創建它。」

如果由於Objective-C運行時處理由nil構成的消息而調用dealloc,將ivars設置爲零將不會產生任何後果。

+0

當UIViewControllers引用計數變爲零時,即釋放UIViewController時。我沒有意識到這一點,很好的理解和一個​​很好的理由都有[self setPickerData:nil]; &[pickerData發佈]; – fuzzygoat 2010-02-11 20:04:15

+0

感謝編輯Rob的額外信息,非常感謝。 – fuzzygoat 2010-02-11 21:06:43

相關問題