2012-02-03 21 views
5

Entiendo la razón por la que debo usar conservar, pero ¿por qué debería usar asignar? (además de evitar retener ciclos)¿Cuándo debería usar assign en Objective c?

[EDIT] Así que si he entendido la respuesta de Chuck en https://stackoverflow.com/questions... correctamente, cuando cada vez que uso de asignación, la variable perdería alcance una vez que se salga de alcance del método que se acaba como lo hace en el comportamiento habitual del lenguaje de tipo C?

+2

Hay una pregunta similar con una buena respuesta aquí: http://stackoverflow.com/questions/1380338/objective-c-101-retain-vs-assign-nsstring – RaysonK

+0

@RaysonK lástima que ninguna de las respuestas fue aceptada . – crashmstr

+0

agregó una edición a mi pregunta original – stackoverflow

Respuesta

12

Debe asignar cosas que no son objetos. Se debe asignar cualquier tipo de C (como int, float, char, double, struct y enum).

+0

e importantes delegados – vikingosegundo

+0

agregaron editar a mi pregunta original – stackoverflow

+0

¿No se asigna un valor predeterminado? Entonces ¿por qué es –

2

Pocos ejemplos que se me ocurren:

  1. No es un objeto. Tal como BOOL, Int
  2. mayoría de las veces propiedades de delegado se asignan (para evitar ciclos)
+0

delegados son débiles –

1
  1. Cualquier cosa que no es un objeto
  2. Delegados
  3. IBOutlets que no son de nivel superior (es decir, las subvistas ya que las ya están conservadas por la vista)
+0

añadido una edición de mi pregunta original – stackoverflow

1

Suponiendo que la respuesta de Chuck de la pregunta vinculada es correcta, en realidad no hay un "alcance" en Objective-C. Parece que debería usar assign para cualquier primitiva, como ints o BOOL. Cualquier cosa de la que necesite ser propietario, use retain (u otros comandos, como describe Chuck).

+0

Ok. Entiendo que necesito asignar primitivas. Ahora que pasa si utilizo assign para un objeto. ¿Está diciendo que no se garantiza que ese objeto sea válido aunque fuera su uso si no se retuvo previamente? – stackoverflow

+0

No puedo asegurarlo porque esto se infiere de lo que dijo ese otro usuario, pero, como puedo ver, le está dejando al programa decidir cuándo se está utilizando la variable en cuestión. Alguien me corrige si me equivoco, pero creo que 'assign' solo significa que vas a cambiar el valor de la variable. – RaysonK

Cuestiones relacionadas