He encontrado varias personas/artículos (por ejemplo, this SO answer) que sugieren que el valor de los punteros en Objective-C no se define hasta que le asigne algo. Sin embargo, yo estoy encontrando en la práctica que se ajustan automáticamente a nil
incluso antes de que llame alloc
- el código siguiente ejecuta para mí sin afirmar:¿Los punteros siempre están configurados como nulos en la declaración?
NSString* foo; // 1
assert(foo==nil); // foo is nil
foo = [NSString alloc]; // 2
assert(foo!=nil); // after alloc, not nil.
foo = [foo init]; // 3
assert(foo!=nil); // still not nil
CAN/debo confiar en esto? ¿Está garantizado o simplemente estoy ejecutando mi compilador (Xcode) en algún tipo de modo de depuración? (Soy nuevo en Objective-C).
Una pregunta corolario: ¿cuál es la terminología correcta para describir foo
en el estado al final de las líneas marcadas 1, 2 y 3? Me imagino que al menos uno de 1 & 2 se denomina 'no inicializado', y uno de 2 & 3 se 'inicializa', pero ¿a qué llamamos la tercera opción?
después de objeto alloc y normalmente no == nil . es igual a cero es un error – theWalker
Posible duplicado de http://stackoverflow.com/questions/3989377/xcode-compiler-doesnt-set-my-variable-and-pointer-initial-value-to-0-or-nil –