2011-07-18 8 views
5

me preguntaba cuando usamos el método "init" en un proyecto? he visto muchos proyectos sin él, utilizaron "applicationDidFinishLaunching" para iniciar la aplicación, pero no el método init, ¿tienen alguna idea al respecto?¿Comenzar con el método init o no?

Muchas gracias

Respuesta

3

El método init se utiliza para inicializar un objeto después de su asignación. En caso de que no esté definido, se llama a la implementación de la clase base, como con cualquier otro método en Objective-C, y si la clase base no tiene el método init, se llamará a la clase base 'clase base' init, y así sucesivamente, hasta NSObject 's init que es seguro.

Si no declara un método init, entonces no podrá inicializar correctamente los ivars en su clase, si corresponde.

Acerca de applicationDidFinishLaunching, este es un método para una clase muy especial que tiene cualquier aplicación Cocoa/iOS, su aplicación delegada. Por ejemplo:

@interface myAppDelegate : NSObject <UIApplicationDelegate> { 
... 
} 

(NB: UIApplicationDelegate podría ser así NSApplicationDelegate)

Como se ve, esta clase se deriva de NSObject, por lo que, se inited por el marco llamando a un método init se define en esa clase (que específicamente depende del marco). Luego, en algún punto, el marco llamará al método applicationDidFinishLaunching y tendrá un cambio para inicializar a todos los miembros de sus delegados y hacer lo que sea necesario para iniciar su aplicación.

En este caso, el hecho de que usted no está obligado a hacer la inicialización de un método init pero en applicationDidFinishLaunching se relaciona con un patrón específico de la interacción entre su UIApplication (o NSApplication) objeto y su delegado. Este patrón fue definido por Apple de esta manera;

  1. especifica la clase de aplicación delegado ya sea en su MainWindow.xib o al llamar UIApplicationMain en main.c;

  2. el marco es responsable de crear una instancia de esas clases (de una manera personalizada que los programadores no necesitan tratar) y llama al applicationDidFinishLaunching para que puedas hacer lo que necesites con él.

espero que esta explicación le ayuda a comprender lo que está pasando con el delegado de la aplicación y por qué no se declara un método init.

+0

gracias, puedo hacer unas preguntas? Entonces, si tengo ivars (que en realidad es casi siempre el caso?) debería declarar un método init, ¿así que casi todo el tiempo? Además, realmente no entiendo el tema con applicationDid ...: "está relacionado con un patrón específico de interacción ... y su delegado que Apple decidió usar", ¿me lo puede explicar un poco más? Estoy bastante seguro de que no entendí la cosa en su explicación;) – Paul

+0

Sí, casi siempre que necesita un método init. Objective-C ivars se inicializan por defecto a 'nil', pero creo que para legibilidad y mantenibilidad, si tiene ivars, es mejor definir un método' init'. Lea también mi edición para la parte de "interacción" ... – sergio

+0

ok gracias sergio – Paul

1

Implementación init método no es necesario a menos que desee realizar una inicialización personalizada.

Doc dice,

subclases debe reemplazar el método init para agregar código de inicialización específica de clase.versiones subclase de init necesitan incorporar el código de inicialización para las clases que heredan de, a través de un mensaje a súper:

+0

Gracias EmptyStack por su respuesta – Paul

+0

¡Bienvenido! ¡Pablo! – EmptyStack

Cuestiones relacionadas