¿@synchronized (self) crea un bloque donde el prefijo self es innecesario en las propiedades?


He leído algo en algún código extranjero y quiero comprobar mi suposición:

@synchronized(self) se utiliza para deshacerse del prefijo self al establecer una propiedad.

Así que en mi ejemplo a continuación, estoy estableciendo el strText de la instancia, no solo una variable local, ¿verdad?

- (void)myfunction{
    NSString * strText = @"var in function";
    @synchronized(self)
    {
         strText = @"var class (self.strText)";
    }

}
Author: Josh Caswell, 2011-01-11

2 answers

Por favor, lea esta Documentación

La directiva @synchronized() bloquea una sección de código para su uso por un solo hilo. Otros hilos se bloquean hasta que el hilo sale de la código protegido-es decir, cuando la ejecución continúa más allá del último sentencia en el bloque @synchronized().

La directiva @synchronized() toma como único argumento cualquier Objective-C object, including self.

Como Massimo Cafaro señaló : "Es más seguro crear todo el mutuo exclusion objects before the application becomes multithreaded, to avoid race conditions."

 41
Author: Tirth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:03

@synchronized(self) se usa para deshacerse del self. prefijo.

Así que en mi ejemplo establecí el strText no en la función lo establecí en el clase.

Se están mezclando dos conceptos.

  1. @synchronized(self) { ... } solo bloquea el bloque usando el objeto self como semáforo.
  2. En Objective-C, no hay nada como una hipotética declaración with como en otros lenguajes que elimine la necesidad de self.whatever de ser solo whatever. Podría querer tomar el Stanford CS193P curso en línea para repasar el idioma.
 8
Author: newacct,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-24 20:28:46