2009-03-02 11 views
18

Quiero escribir algunos métodos en una clase para que otras clases puedan llamar a estos métodos usando [instance methodName:Parameter].¿Cómo inicializar una subclase de NSObject en iPhone?

Si la clase es una subclase de UIViewController, puedo usar initWithNibName para inicializarla. Pero quiero escribir los métodos en una subclase NSObject, ¿cómo puedo inicializarlo?

Respuesta

-2

me parece que esto puede funcionar:

TheClass *newObject = [[TheClass alloc] init]; 
//do something here 
[newObject release];
+1

Eso simplemente está inicializando el objeto "newObject" como una clase TheClass. Si TheClass no implementa "- (id) init" con "[super init]" y "return self", su inicialización probablemente fallará. – Klompengard

57

iphony es correcta, pero él o ella no dice que tiene que escribir el método init mismo. Su método init en general, debe ser algo como esto:

- (id) init 
    { 
    if (self = [super init]) 
     { 
     myMember1 = 0; // do your own initialisation here 
     myMember2 = 0; 
     } 
    return self; 
    } 

Aunque el apple documentation dice

El método init definido en la clase NSObject hace ninguna inicialización; simplemente regresa a sí mismo.

y uno puede estar tentado a escribir

- (id) init 
    { 
    myMember1 = 0; // do your own initialisation here 
    myMember2 = 0; 
    return self; 
    } 

esto está mal y no seguir lo que se dice explícitamente en la documentación:

En una implementación personalizada de este método (init) , debe invocar el inicializador designado de super , luego inicializar y devolver el nuevo objeto.

MUST. No debería, podría, debería, etc.

No debe suponer que el init de NSObject no cambia en el futuro; ni la superclase de la que deriva su clase personalizada.

+0

es [super init] necesario? porque la documentación del método init de NSObject dice lo contrario. – santhu

+0

¡Uno nunca debería omitir super init! Incluso si no hace nada. Los documentos dicen explícitamente: "En una implementación personalizada de este método, debe invocar el inicializador designado de super, luego inicializar y devolver el nuevo objeto". He editado la respuesta. – manicaesar

Cuestiones relacionadas