tutorial smart remix español curso aprender objective-c initialization int instance-variables

objective c - smart - ¿Las entradas siempre se inicializan en 0?



solidity español (3)

¿Es seguro contar con int s siempre inicializado a 0 en Objective-C?

Más específicamente, cuando un objeto con int ivars ha sido recientemente instanciado, ¿es seguro asumir que sus ivars tienen valor 0?


No creo que deba suponer ningún valor para la inicialización. Si está construyendo lógica alrededor de un valor "0", debe configurarlo para estar seguro.


Sí, en C los valores globales se inicializan a cero. En Objective-C, incluso los vars locales se inicializan a cero. Usted puede contar con él.


Sí, las variables de instancia de clase siempre se inicializan a 0 (o nil , NULL o false , según el tipo de datos exacto). Ver el lenguaje de programación Objective-C 2.0 :

El método alloc asigna dinámicamente la memoria para las variables de instancia del nuevo objeto y las inicializa a 0, es decir, a excepción de la variable isa que conecta la nueva instancia a su clase.

EDITAR 2013-05-08
Apple parece haber eliminado el documento anterior (ahora vinculado a The Wayback Machine). El documento activo (actualmente) Programming With Objective-C contiene una cita similar:

El método alloc tiene otra tarea importante, que es borrar la memoria asignada para las propiedades del objeto al establecerlos en cero. Esto evita el problema habitual de la memoria que contiene basura de lo que fuera almacenado anteriormente, pero no es suficiente para inicializar un objeto por completo.

Sin embargo, esto solo es cierto para las variables de una clase; también es cierto para los tipos de POD declarados a nivel mundial:

// At global scope int a_global_var; // guaranteed to be 0 NSString *a_global_string; // guaranteed to be nil

Con una excepción, no es cierto para las variables locales, o para los datos asignados con malloc() o realloc() ; es cierto para calloc() , ya que calloc() explícitamente cierra la memoria que asigna.

La única excepción es que cuando el conteo automático de referencias (ARC) está habilitado, los punteros de pila a los objetos de Objective-C se inicializan implícitamente a nil ; sin embargo, sigue siendo una buena práctica inicializarlos explícitamente a nil . Desde la transición a las notas de la versión de ARC :

Las variables de pila se inicializan con nil

Utilizando ARC, las variables de pila fuertes, débiles y autorrellentes ahora se inicializan implícitamente con nil

En objetos C ++ (y C ++ que se usan en Objective-C ++), las variables de instancia de clase tampoco se inicializan a cero. Debe inicializarlos explícitamente en su (s) constructor (es).