¿Cómo implementar propiedades atómicas en el objetivo C (con o sin ARC)?

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?

preguntado el 22 de mayo de 12 a las 17:05

No en realidad no. Ver Propiedades atómicas y no atómicas -

1 Respuestas

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 or haz tu propia pregunta.