2009-08-14 75 views
17

在Objective-C中,您可以使用@synchronized构造将一个块声明为在某个对象上同步。这将是这个样子:@synchronized in static method

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

不过,我很好奇,究竟是什么self是指当你有一个静态方法(的+代替-)来。我试着翻阅苹果文档,他们暗示它没问题,但并不真正解释它。我知道它行得通,我只是好奇它的意思。

回答

26

self里面的一个类(静态)方法引用了类对象。

+0

谢谢。我知道我错过了一些简单的东西。 – Itay 2009-08-14 20:20:28

+4

请注意,类方法中的@synchronized(self)可能会很危险,因为对于子类,self是一个不同的对象(类),所以仍然可以并发访问这两个类之间的方法 – 2016-01-06 18:52:31

13

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

0

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