在像这样的方法中,同步(即self
或thing
)?
- (BOOL)deleteThing:(MSThing *)thing error:(NSError **)error
{
@synchronized(self) {
if (!thing) {
return YES;
}
NSString *fileName = [[self thingDirectory] stringByAppendingPathComponent:thing.cacheInstanceName];
if (![[NSFileManager defaultManager] fileExistsAtPath:fileName]) {
//...
=== OR ===
- (BOOL)deleteThing:(MSThing *)thing error:(NSError **)error
{
@synchronized(thing) {
if (!thing) {
return YES;
}
NSString *fileName = [[self thingDirectory] stringByAppendingPathComponent:thing.cacheInstanceName];
if (![[NSFileManager defaultManager] fileExistsAtPath:fileName]) {
//...
答案 0 :(得分:7)
在第一种情况下,
@synchronized(self) { ... }
代码不会被调用该方法的两个线程同时执行
instance (self
)。如果代码访问或修改实例,这可能是您想要的
以线程不安全的方式。
在第二种情况下,
@synchronized(thing) { ... }
调用该方法的两个线程不会同时执行代码
相同的参数(thing
)。