2011-01-28 80 views
3

我不打算进入哪一个被调用的时间和原因。 (已经有很多了)代码冗余...我应该在dealloc中调用viewDidUnload

既然我们不能依靠viewDidUnloaddealloc之前被调用,我发现自己在这些方法之间有很多重复的代码。

- (void)viewDidUnload { 
     [super viewDidUnload]; 
     self.foo = nil; 
     self.bar = nil; 
} 

- (void)dealloc { 
     [super dealloc];   
     [foo release]; 
     [bar release]; 
     [abc release]; 
} 

冗余代码,ick。任何人都知道更多这样做的问题?

- (void)viewDidUnload { 
     [super viewDidUnload]; 
     [foo release]; 
     foo = nil; 
     [bar release]; 
     bar = nil; 
} 

- (void)dealloc { 
     [super dealloc]; 
     [self viewDidUnload]; 
     [abc release]; 
} 

当然,我得[super viewDidUnload]额外的呼叫,但我想,这是一个非问题,因为它只是做这将在dealloc已经完成反正东西。我也换了viewDidUnload,所以它没有使用访问器。

+0

另外,如果你的父控制器也在做一些卸载,你应该在你的dealloc方法中调用[super dealloc],最后调用[super viewDidUnload]。我们有一些奇怪的错误是因为首先调用[super dealloc] ....(而负载方法则相反 - 在执行其他操作之前调用[super load])。 – bandejapaisa 2011-10-10 11:41:36

回答

2

我将我的deallocs和nil集分解为-releaseOutlets方法。 (我在这里放置的不仅仅是发布商店,这对我来说只是历史。)然后从每个方面调用该方法。不要从dealloc中调用viewDidUnload,这是未定义的行为,并随时可能更改。

5

我不能确定它是否是安全的反复调用viewDidUnload,但没有什么从分解出释放/ nilling到您来自viewDidUnloaddealloc调用第三个方法阻止你。

+0

我正在考虑作为一个选项。我只是不知道是否需要中间人的方法,或者我可以跳过它并降低复杂性。 – DBD 2011-01-28 16:29:16