在具有返回值的方法中使用@synchronized

时间:2014-03-17 17:46:39

标签: ios objective-c multithreading

如果我在方法中使用指令@synchronized,并且该方法有一个返回值BOOL或NSString,我可以使用它吗?

@synchronized(self)  {
    if (![self hasSource]) {
        *source = nil;
        return YES;
    } 


}
return NO;

=== OR ====

@synchronized(self)  {
    if (![self hasSource]) {
        *source = nil;
        return YES;
    } 

    return NO;
}

2 个答案:

答案 0 :(得分:3)

在您发布的代码中,两者都有效,因为两个线程同时尝试访问同步代码不会影响返回值。

如果返回值可能受到另一个线程的影响,您会希望同步块中有return

答案 1 :(得分:1)

好的我不确定,但在我看来,我会认为前一个例子是整个操作受@synchronize指令保护。

当然,我会毫无疑问地在我的脑海中播种,以这种方式编码。