17

@synchronizedObjective-Cでは、コンストラクトを使用して、あるオブジェクトで同期されているブロックを宣言できます。次のようになります。

@synchronized (self) {
    // Do something useful
}

ただし、(の代わりに)self静的メソッドがある場合に正確に何を指しているのか興味があります。私はAppleのドキュメントを調べてみましたが、彼らはそれが大丈夫だとほのめかしていますが、実際には説明していません。私はそれが機能することを知っています、私はそれが何を意味するのか興味があります。+-

4

3 に答える 3

29

selfクラス(静的)メソッドの内部は、クラスオブジェクトを参照します。

于 2009-08-14T20:19:04.433 に答える
13

Objective-Cselfでは、コンテキストによって決定されます。インスタンスメソッドでは、それが呼び出されるインスタンスになります。静的メソッドでは、それはクラスオブジェクト自体になります(つまり、[self class]インスタンスメソッドの結果)

于 2009-08-14T20:20:03.353 に答える
0

上記の回答では、あるスレッドが@synchronized(self)を使用してインスタンスメソッドを呼び出し、別のスレッドが@synchronized(self)を使用してクラスメソッドを呼び出す場合、2つの呼び出し間で同期が発生しないことに注意してください。同期のために異なるオブジェクトを使用します。

于 2015-05-08T23:54:58.347 に答える