objective c - separado - ¿@Synchronized(self) crea un bloque donde el auto prefijo no es necesario en las propiedades?
prefijo fundéu (2)
@synchronized (self) se usa para deshacerse del self. prefijo.
Entonces, en mi ejemplo, establezco el strText no en la función, lo configuro en la clase.
Se están combinando dos conceptos.
-
@synchronized(self) { ... }
solo bloquea el bloque utilizando el objetoself
como semáforo. - En Objective-C, no hay nada como un hipotético
with
declaración como en otros lenguajes que elimina la necesidad de queself.whatever
mismowhatever
lo quewhatever
. Es posible que desee tomar el curso en línea Stanford CS193P para repasar el idioma.
He leído algo en algún código extranjero y quiero verificar mi suposición:
@synchronized(self)
se usa para deshacerse del self
prefijo cuando se configura una propiedad.
Entonces, en mi ejemplo a continuación, estoy configurando 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)";
}
}
Por favor lea esta Documentation
La directiva
@synchronized()
bloquea una sección de código para ser utilizada por un solo hilo. Otros subprocesos se bloquean hasta que el subproceso sale del código protegido, es decir, cuando la ejecución continúa más allá de la última instrucción en el bloque@synchronized()
.La directiva
@synchronized()
toma como único argumento cualquier objeto Objective-C, incluido elself
.
Como señaló Massimo Cafaro : "Es más seguro crear todos los objetos de exclusión mutua antes de que la aplicación se multihebra, para evitar las condiciones de la carrera".