1

「初期化」の定義を見てみましょう。

+ (void)initialize

討論

ランタイムは、クラスまたはそれを継承するクラスがプログラム内から最初のメッセージを送信する直前に、プログラム内の各クラスに初期化を送信します。(したがって、クラスが使用されていない場合、メソッドが呼び出されることはありません。)ランタイムは、スレッドセーフな方法で初期化メッセージをクラスに送信します。スーパークラスは、サブクラスの前にこのメッセージを受け取ります。

初期化は「スレッドセーフな方法」で送信されると述べられています。隠れて、ランタイムはその呼び出しをスレッドセーフにするためのロックを作成していますか、それともランタイムの動作方法から本質的にスレッドセーフですか?ロックする場合、+ initializeを実装すると、ランタイムが他の方法では作成しなかったロックを作成することを意味しますか?

4

1 に答える 1

2

ロックするかどうかはわかりませんが、実装するかどうかに関係なく、+initialize呼び出されます。デフォルトの実装は何かをするかもしれませんが、それでも呼び出されます。したがって、ランタイムがロックする場合、メソッドがサブクラスによって実装されているかどうかに関係なく、ロックが作成されます。

于 2010-02-19T17:15:14.513 に答える