2

Objective-C で dealloc メソッドをオーバーライドすると実際に何が起こるか教えてもらえますか? クラッシュするか、あちこちでメモリリークを開始するかのように。何が起こるのか、なぜプログラマーが直接 dealloc を使用できないようにする必要があるのか​​、疑問に思っていました。

そして、どのような場合にこのようなことをしなければならなかったのでしょうか?

編集:明確でなくて申し訳ありません。私は主に用語またはARCタイプのコーディングについて話していました。

4

2 に答える 2

16

オーバーライド-deallocは、非 ARC コードで行う非常に一般的なことです。実際、それをオーバーライドしないクラスを見つけるのは難しいでしょう。

ただし、覚えておくべき重要なことは、 のすべてのオーバーライドは-dealloc常に の呼び出しで終了するということ[super dealloc]です。

もちろん、ARC コードでは、オーバーライド-deallocはあまり一般的ではありません。オーバーライドする場合は[super dealloc]、コンパイラが挿入するため、呼び出しません。ただし、これは ARC の下でのみ当てはまることを覚えておいてください。

于 2013-01-18T00:49:07.187 に答える
9

メソッドをオーバーライドする ARCdeallocが非常に一般的になる前は、割り当て解除されたインスタンスが所有していた ivar を解放していました。現在、ARC を使用することはあまり一般的ではありませんが、NSNotificationCenter.

あなたが話しているルールはdealloc、Cocoaの内部参照カウントシステムをバイパスしていたため、通常はクラッシュにつながる直接呼び出しではない(オーバーライドではない)ことでした。

編集: 編集に基づいて、[super dealloc]ARC の下で呼び出すと、コンパイル時エラーが発生します。エラーがなければ、dealloc呼び出しが重複してプログラムがクラッシュする可能性があります。

于 2013-01-18T00:51:23.343 に答える