17

@synchronized在 Objective-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)调用一个类方法,这两个调用之间不会发生同步,因为它们是使用不同的对象进行同步。

于 2015-05-08T23:54:58.347 回答