create iphone objective-c cocoa-design-patterns

iphone - create - ¿Cómo debo manejar una falla en un método init: en Objective-C?



uiimageview set image swift (3)

Acabo de intentarlo. -dealloc se llama debido a [self release] , por lo que myObject no tendría que ser lanzado en initWithSomeObject . Para estar seguro, puede mover myObject = [someObject retain]; (Prefiero ese estilo en caso de que la -retain pueda fallar por algún motivo) debajo de la llamada que puede fallar (si es posible).

Digamos que estoy construyendo una nueva clase para el iPhone en Objective-C. En uno de mis métodos de inicio quiero asignar manualmente algo de memoria. Por lo tanto, podría tener algo como esto:

- (id)initWithSomeObject:(SomeObject *)someObject { self = [super init]; if (self != nil) { myObject = someObject; [myObject retain]; if ( (memory = calloc(1, sizeof(SomeStruct)) == NULL) { // What should I do here to clean up [self release]; self = nil; } } return self; }

Ahora, suponiendo que el calloc () pueda fallar, y que no asignar memoria sea catastrófico para mi objeto, ¿qué debo hacer dentro del if-body para limpiar correctamente? ¿Hay algún idioma o patrón de Objective-C que deba usar?

Edición: Incluí el código publicado por Rob Napier. Pero, todavía tengo que liberar miObjeto, ¿verdad? ¿O el código agregado de alguna manera desencadena dealloc ()?


Debe limpiar todo lo que necesite y luego establecer la auto referencia en nil . Apple Dev Portal tiene un artículo:

Link


Sí, deberías liberarte y luego regresar.

[self release]; self = nil;

Consulte Problemas con los inicializadores en la guía de programación Conceptos en Objective-C.