Какие преимущества имеет dispatch_sync по сравнению с @synchronized?

Допустим, я хочу сделать этот код потокобезопасным:

- (void) addThing:(id)thing { // Can be called from different threads
    [_myArray addObject:thing];
}

GCD кажется предпочтительным способом достижения этого:

- (void) addThing:(id)thing { 
    dispatch_sync(_myQueue, ^{  // _myQueue is serial.
        [_myArray addObject:thing];
    });    
}

Какие преимущества он имеет по сравнению с традиционным методом?

- (void) addThing:(id)thing {
    @synchronized(_myArray) {
        [_myArray addObject:thing];
    }
}

Ответы на вопрос(4)

Ваш ответ на вопрос