¿@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)";
}
}
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, includingself
.
Como Massimo Cafaro señaló : "Es más seguro crear todo el mutuo exclusion objects before the application becomes multithreaded, to avoid race conditions."
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.
-
@synchronized(self) { ... }
solo bloquea el bloque usando el objetoself
como semáforo. - En Objective-C, no hay nada como una hipotética declaración
with
como en otros lenguajes que elimine la necesidad deself.whatever
de ser solowhatever
. Podría querer tomar el Stanford CS193P curso en línea para repasar el idioma.
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