2011-01-28 4 views
3

私はいつ、なぜ呼び出されるのでしょうか。私は方法の間重複コードの多くで自分自身を見つけるdealloc前に、私たちが呼び出されるviewDidUnloadに頼ることはできませんのでコードの冗長性...私はdeallocでviewDidUnloadを呼び出す必要があります

(多くはすでにその上あります)。

- (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]を最初に呼び出すことで奇妙なバグが発生しました(そして、反対の方法はロードメソッドのためにあります - 他に何かをする前に[スーパーロード]と呼んでください)。 – bandejapaisa

答えて

2

私は、deallocsとnilのセットを-releaseOutletsメソッドに組み込みました。 (私はここにリリースされた店舗以上を置いた、それは私の歴史的なものです)。 deallocからviewDidUnloadを呼び出さないでください。これは未定義の動作であり、いつでも変更される可能性があります。

5

は私が繰り返しviewDidUnloadを呼び出すために、それは安全なのかどうかわからないんだけど、あなたはviewDidUnloaddeallocの両方から呼び出す第三の方法にnilling /解除を因数分解からあなたを止めるものは何もありません。

+0

私はこれをオプションとして考えていました。私は中間的な方法が必要かどうか分からなかったし、それをスキップして複雑さを減らすこともできた。 – DBD

関連する問題