@synchronized在静态方法中

时间:2009-08-14 20:06:53

标签: objective-c thread-safety synchronized

在Objective-C中,您可以使用@synchronized构造将块声明为在某个对象上进行同步。它看起来像这样:

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

但是,我很好奇当你有一个静态方法(self而不是+)时,-究竟指的是什么。我尝试查看Apple文档,他们暗示它没问题,但是没有真正解释它。我知道它有效,我只是好奇它意味着什么。

3 个答案:

答案 0 :(得分:28)

在类(静态)方法中的

self引用类对象。

答案 1 :(得分:13)

在Objective-C中self由上下文决定。在实例方法中,这将是被调用的实例。在静态方法中,它将是类对象本身(即实例方法中[self class]的结果)

答案 2 :(得分:0)

根据上面的答案,请记住,如果一个线程使用@synchronized(self)调用实例方法,而另一个线程使用@synchronized(self)调用类方法,则两个调用之间不会发生同步,因为他们使用不同的对象进行同步。