Pregunta

¿Qué significa " no atómico " significa en este código?

@property(nonatomic, retain) UITextField *theUsersName;

¿Cuál es la diferencia entre atómico y no atómico?

Gracias

¿Fue útil?

Solución

Echa un vistazo a la Apple Docs .

Básicamente, si dice no atómico , y genera los accesores usando @synthesize , entonces, si varios subprocesos intentan cambiar / leer la propiedad de una vez, la maldad puede ocurrir. . Puede obtener valores parcialmente escritos u objetos de sobreexpedición / retenido, que pueden provocar fallos fácilmente. (Sin embargo, esto es potencialmente mucho más rápido que un descriptor de acceso atómico).

Si usa el valor predeterminado (que es atomic ; no solía haber una palabra clave para esto, pero hay is now ), luego los métodos @synthesize d utilizan un bloqueo a nivel de objeto para garantizar que haya múltiples lecturas / escrituras a una sola propiedad se serializan. Como señalan los documentos de Apple, esto no significa que todo el objeto sea seguro para subprocesos , pero las lecturas / escrituras de las propiedades individuales lo son.

Por supuesto, si implementas tus propios accesores en lugar de usar @synthesize , creo que estas declaraciones no hacen nada excepto expresar tu intención de si la propiedad se implementa de una manera segura para subprocesos.

Otros consejos

Después de leer tantos artículos y publicaciones de StackOverflow, y de haber creado aplicaciones de demostración para verificar los atributos de las propiedades de las variables, decidí unir toda la información de los atributos

  1. atomic // default
  2. no atómico
  3. fuerte = retener // predeterminado
  4. débil = unsafe_unretained
  5. retener
  6. asignar // predeterminado
  7. unsafe_unretained
  8. copiar
  9. readonly
  10. readwrite // default

así que debajo está el enlace detallado del artículo donde puedes encontrar todos los atributos mencionados anteriormente, que definitivamente te ayudarán. ¡Muchas gracias a todas las personas que dan las mejores respuestas aquí!

  

Atributos de propiedades variables o Modificadores en iOS

  1. atómico
    • Atomic significa que solo un hilo accede a la variable (tipo estático).
    • Atomic es seguro para hilos.
    • Pero su rendimiento es lento.
    • El comportamiento predeterminado es atómico.
    • Los accesores atómicos en un entorno no recolectado de basura (es decir, cuando se utiliza retener / liberar / autorelease) usarán un bloqueo para garantizar que otra hebra no interfiera con la configuración / obtención correcta del valor.
    • en realidad no es una palabra clave.

Ejemplo:

@property (retain) NSString *name;

@synthesize name;
  1. no atómico
    • No atómico significa que múltiples hilos acceden a la variable (tipo dinámico).
    • Nonatomic es un hilo inseguro.
    • Pero es rápido en el rendimiento.
    • Nonatomic NO es un comportamiento predeterminado; necesitamos agregar una palabra clave no atómica en el atributo de propiedad.
    • puede resultar en un comportamiento inesperado, cuando dos procesos diferentes (hilos) acceden a la misma variable al mismo tiempo.

Ejemplo:

@property (nonatomic, retain) NSString *name;

@synthesize name;

Además de lo que ya se ha dicho acerca de 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 normalmente debas preocuparte, pero tenlo en cuenta. Las propiedades generadas de Core Data son no atómicas parcialmente por este motivo.

En un programa de subprocesos múltiples, una operación atómica no se puede interrumpir parcialmente, mientras que las operaciones no atómicas pueden.

Por lo tanto, debe usar mutexes (o algo así) si tiene una operación crítica que no sea atómica y que no quiera que se interrumpa.

Si especifica " atómico " ;, las funciones de acceso generadas tienen algún código adicional para protegerse contra actualizaciones simultáneas.

Por lo general, atómico significa que las escrituras / lecturas en la propiedad ocurren como una sola operación. Atomic_operation

Puedes obtener un control de estas cosas leyendo el siguiente artículo.

Subprocesos explicados con el propósito de nonatomic

no atómico - No es seguro para subprocesos

atomic - Thread Safe: este es el atributo de propiedad predeterminado.

El " atómico & # 8221; significa que el acceso a la propiedad es seguro para subprocesos. mientras que el " no atómico " es lo contrario. Cuando declara una propiedad en Objective-C, la propiedad es atómica de manera predeterminada, de modo que los accesores sintetizados proporcionan un acceso robusto a la propiedad en un entorno multiproceso & # 8212; es decir, el valor devuelto por el captador o conjunto a través del configurador siempre se recupera completamente o establecer independientemente de qué otros subprocesos se ejecutan al mismo tiempo. Pero si declara la propiedad como no atómica como 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 accesores sintetizados son atómicos. Así que nonatomic es considerablemente más rápido que atómico.

Uno es para múltiples hilos. Uno no es

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top