iphone objective-c cocoa cocoa-touch memory-management

iphone - ¿Las variables de instancia están establecidas en nulo por defecto en Objective-C?



cocoa cocoa-touch (3)

Estoy solucionando algunos problemas de memoria con mi aplicación de iPhone y he estado pensando en algunos conceptos básicos. Si configuro un ivar y nunca termino usándolo en la vida útil de mi objeto, cuando llamo a dealloc, ¿eso causará un problema? P.ej

@interface testClass { id myobject; } @property (nonatomic, retain) id myobject; @end @implementation testClass @synthesize myobject; - (id)init { ... // Do I have to set myobject to nil here? // So if myobject isn''t used the dealloc call to nil // will be okay? Or can you release the variable without // having set every object to nil that you may may not use ... } ... // Somewhere in the code, myobject may be set to // an instance of an object via self.myobject = [AnObject grabAnObject] // but the object may be left alone ... - (void)dealloc { [myobject release]; [super dealloc]; } @end


Encuentro que es una buena práctica establecer siempre esos ivars en nil en el método init . De esta manera, está absolutamente seguro de que su llamada a la release en el destructor no puede causar problemas.

Si resulta que Objective-C los establece automáticamente en nil , y por alguna razón se encuentra con un cuello de botella de velocidad que puede mejorarse eliminando esas asignaciones (muy poco probable), entonces puede preocuparse por eliminarlas. Mientras tanto, nil a nil y duerme más fácil :)

actualización: BJ Homer y Chuck han señalado que los ivars se establecerán automáticamente en cero, por lo que ahora se trata de una decisión sobre el estilo.