在Objective-C中,您可以使用@synchronized
构造将一个块声明为在某个对象上同步。这将是这个样子:@synchronized in static method
@synchronized (self) {
// Do something useful
}
不过,我很好奇,究竟是什么self
是指当你有一个静态方法(的+
代替-
)来。我试着翻阅苹果文档,他们暗示它没问题,但并不真正解释它。我知道它行得通,我只是好奇它的意思。
在Objective-C中,您可以使用@synchronized
构造将一个块声明为在某个对象上同步。这将是这个样子:@synchronized in static method
@synchronized (self) {
// Do something useful
}
不过,我很好奇,究竟是什么self
是指当你有一个静态方法(的+
代替-
)来。我试着翻阅苹果文档,他们暗示它没问题,但并不真正解释它。我知道它行得通,我只是好奇它的意思。
self
里面的一个类(静态)方法引用了类对象。
In Objective-C self
由上下文确定。在实例方法中,这将是被调用的实例。在静态方法中,它将是类对象本身(即实例方法中的[self class]
的结果)
有了上述答案,请记住,如果一个线程使用@synchronized(self)调用实例方法, ,另一个线程使用@synchronized(self)调用一个类方法,这两个调用之间不会发生同步,因为它们使用不同的对象进行同步。
谢谢。我知道我错过了一些简单的东西。 – Itay 2009-08-14 20:20:28
请注意,类方法中的@synchronized(self)可能会很危险,因为对于子类,self是一个不同的对象(类),所以仍然可以并发访问这两个类之间的方法 – 2016-01-06 18:52:31