¿Qué significa "no atómico" en este código?
@property(nonatomic, retain) UITextField *theUsersName;
¿Cuál es la diferencia entre atomic y nonatomic?
Gracias
ios
objective-c
iphone
cocoa
properties
swiftBoy
fuente
fuente
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.fuente
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:
Ejemplo:
fuente
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.
fuente
En un programa multiproceso, una operación atómica no puede interrumpirse parcialmente, mientras que las operaciones no atómicas sí.
Por lo tanto, debe usar mutexes (o algo así) si tiene una operación crítica que no es atómica y que no desea interrumpir.
fuente
Si especifica "atómico", las funciones de acceso generadas tienen algún código adicional para evitar actualizaciones simultáneas.
fuente
Por lo general, atómico significa que las escrituras / lecturas en la propiedad suceden como una sola operación. Operación atómica
fuente
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.
fuente
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
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.
fuente
Uno es para hilos múltiples. Uno no
fuente