¿Cómo implementar propiedades atómicas en el objetivo C (con o sin ARC)?
Frecuentes
Visto 463 veces
0
Así es como implemento el mío. Algo simplemente no se llena bien
-(void)setCurrentAnchor:(CLLocation *)currentAnchor
{
//CM(@"set current anchor");
/*@synchronized (self)
{
}*/
if (_currentAnchor==currentAnchor)
{
return;
}
//[Tools DoSomethingWithSynchronize:^{
@synchronized(self){
_currentAnchor=currentAnchor;
[Timer searchCriteriaChanged];
[cachedProperties setDistanceForAllBiz];
}
//}];
}
-(CLLocation *)currentAnchor
{
//[Tools DoSomethingWithSynchronize:^{
//}];
@synchronized(self){
} //Empty @synchronized section just to block every other thread
[self setCurrentLocationasAnchorifNil];
return _currentAnchor;
}
El objetivo es, por supuesto, garantizar que no se acceda a currentAnchor cuando está cambiando. ¿Lo estoy haciendo bien?
1 Respuestas
0
Es mucho mejor usar implementaciones de getter/setter simples y muertas: @synthesize
idealmente, y mueva toda la lógica de respuesta de cambio fuera del getter/setter. KVO funciona bien si necesita una lógica de respuesta única de getter/setter. Tendrá que tener un mecanismo de transacción externo si desea procesar por lotes una respuesta a varios cambios de propiedad.
contestado el 22 de mayo de 12 a las 17:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas objective-c multithreading xcode4.3 synchronized or haz tu propia pregunta.
No en realidad no. Ver Propiedades atómicas y no atómicas - jscs