我应该与self同步还是与方法参数同步?

时间:2014-03-17 18:05:24

标签: objective-c multithreading synchronized

在像这样的方法中,同步(即selfthing)?

- (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]) {
        //...

1 个答案:

答案 0 :(得分:7)

在第一种情况下,

@synchronized(self)  { ... }

代码不会被调用该方法的两个线程同时执行 instance self)。如果代码访问或修改实例,这可能是您想要的 以线程不安全的方式。

在第二种情况下,

@synchronized(thing)  { ... }

调用该方法的两个线程不会同时执行代码 相同的参数thing)。