2009-06-15 22 views
10

es decir, qué se comportan como ObjectiveC C, en el que si se crea un puntero por ejemplo:En ObjectiveC, ¿los punteros son variables de instancia de clase inicializadas a 'nil', o de lo contrario?

NSString* c; 

¿El punto C a cero, o al valor aleatorio en el área de memoria que estaba reservado para él?

En otras palabras, ¿los punteros se preinicializan, o tengo que hacerlo yo mismo? Como dije, soy consciente de que este no es el caso en C/C++, pero me pregunto si hay alguna magia ObjC aquí o no.

Respuesta

13

variables de instancias de clase en Objective-C están garantizados para ser inicializado a su valor vacío (0, nil, etc ...)

+0

Brilliant - cheers. Desafortunadamente, eso significa que mi error no está donde pensé que estaba. – Chaos

+0

Más específicamente, el espacio de memoria para una clase se pone a cero cuando se asigna. Los punteros en un método o función funcionan exactamente como en C. – Chuck

1

Son nulas, y se le permite asumir esto, por ejemplo mediante pruebas :

if (nil == myVariableIHaventInitialisedYet) 
{ 
    myVariableIHaventInitialisedYet = [SomeThingIMightMake initWithLove]; 
} 
+0

¡Buen código de yoda! – toxaq

3

variables de instancia de clase y variables estáticas/globales inicializadas a cero/NULL/0/falso según corresponda.

Sin embargo, las variables locales no se inicializan.

0

Mire las variables locales en este caso. No se inicializan a cero, así que asegúrese de que hayan sido iniciados en algún lugar antes de usarlo si no inició nulo en su declaración. Como dice Peter, la clase, la instancia y la estática se inician en cero para que no te preocupes.

Normalmente no hay problemas, pero en particular marcará una diferencia en las llamadas con referencias de punteros pasados ​​(como NSError **).

Cuestiones relacionadas