¿Qué significa "no atómico" en este código?
@property(nonatomic, retain) UITextField *theUsersName;
¿Cuál es la diferencia entre atomic y nonatomic?
Gracias
¿Qué significa "no atómico" en este código?
@property(nonatomic, retain) UITextField *theUsersName;
¿Cuál es la diferencia entre atomic y nonatomic?
Gracias
Respuestas:
Echa un vistazo a los documentos de Apple .
Básicamente, si usted dice nonatomic
, y genera los accesos usando @synthesize
, entonces si múltiples hilos intentan cambiar / leer la propiedad a la vez, puede ocurrir algo malo. Puede obtener valores parcialmente escritos u objetos sobre liberados / retenidos, lo que puede provocar fácilmente bloqueos. (Sin embargo, esto es potencialmente mucho más rápido que un accesor atómico).
Si usa el valor predeterminado (que es atomic
; antes no había una palabra clave para esto, pero ahora sí ), entonces los @synthesize
métodos d usan un bloqueo de nivel de objeto para garantizar que se serialicen múltiples lecturas / escrituras en una sola propiedad. Como señalan los documentos de Apple, esto no significa que todo el objeto sea seguro para subprocesos , pero las propiedades individuales de lectura / escritura sí lo son.
Por supuesto, si implementa sus propios accesos en lugar de usarlos @synthesize
, creo que estas declaraciones no hacen nada excepto expresar su intención de si la propiedad se implementa de manera segura.
atomic
evita bloqueos al acceder a propiedades individuales pero no garantiza que el objeto en su conjunto (es decir, acceder a propiedades separadas como el nombre y los apellidos) va a hacer Lo correcto.
Después de leer tantos artículos y publicaciones de StackOverflow, y haber creado aplicaciones de demostración para verificar los atributos de propiedad Variable, decidí reunir toda la información de los atributos
así que a continuación se encuentra el enlace detallado del artículo donde puede encontrar todos los atributos mencionados anteriormente, que definitivamente lo ayudarán. ¡Muchas gracias a todas las personas que dan las mejores respuestas aquí!
Ejemplo:
@property (retain) NSString *name;
@synthesize name;
Ejemplo:
@property (nonatomic, retain) NSString *name;
@synthesize name;
Además de lo que ya se ha dicho sobre la seguridad de los hilos, las propiedades no atómicas son más rápidas que los accesores atómicos. No es algo de lo que deba preocuparse, pero tenga en cuenta. Las propiedades generadas por Core Data son parcialmente no atómicas por este motivo.
Si especifica "atómico", las funciones de acceso generadas tienen algún código adicional para evitar actualizaciones simultáneas.
Por lo general, atómico significa que las escrituras / lecturas en la propiedad suceden como una sola operación. Operación atómica
Puede obtener un control de estas cosas leyendo el siguiente artículo.
Roscado explicado con el propósito no atómico
no atómico: no es seguro para subprocesos
atomic - Thread Safe - Este es el atributo de propiedad predeterminado.
El "atómico" significa que el acceso a la propiedad es seguro para subprocesos, mientras que el "no atómico" es lo opuesto. Cuando declara una propiedad en Objective-C, la propiedad es atómica por defecto, de modo que los accesos sintetizados proporcionan un acceso robusto a la propiedad en un entorno multiproceso, es decir, el valor devuelto por el getter o establecido a través del setter siempre se recupera o establece por completo independientemente de lo que otros subprocesos se ejecuten simultáneamente, pero si declara la propiedad como no atómica como se muestra a continuación
@property (nonatomic, retain) NSString *myString;
entonces significa que un descriptor de acceso sintetizado para una propiedad de objeto simplemente devuelve el valor directamente. El efecto del atributo no atómico depende del entorno. Por defecto, los accesos sintetizados son atómicos. Entonces no atómico es considerablemente más rápido que atómico.
Uno es para hilos múltiples. Uno no