L'utilizzo di @syncrhonized(obj)
costituisce un blocco in modo che l'altro codice di sincronizzazione su obj
non venga eseguito contemporaneamente.
Le proprietà atomiche funzionano impedendo che vengano apportate modifiche mentre si accede a una proprietà; forniscono il blocco implicito per l'accesso.
array = someObject.array; //locked
[array doSomething]; //no longer locked
Non è possibile sostituire getter e setter per atomic
proprietà, ma utilizzando la direttiva @sycnronized
tutto il getter/setter dovrebbe essere sufficiente.
@synthesize array=_array;
...
-(void)setArray
{
@synchronized(self)
{
_array = array;
}
}
-(NSArray *)array
{
NSArray *retVal;
@synchronized(self)
{
retVal = _array;
}
return retVal;
}
Onestamente, a meno che non si sta facendo un po 'di programmazione multithread seriamente, proprietà atomiche sono inutili e solo causano colpi di prestazioni.
fonte
2012-05-08 16:23:41
O meglio, usa pattern lettore-scrittore, una coda concorrente GCD, esegue letture con 'dispatch_sync' e scrive con' dispatch_barrier_async'. – Rob