No mejor llamar initWithNibName:
indirectamente a través de init es . Solo quiere llamar al initWithNibName:
en algún momento. Puedes hacerlo externa o internamente. Algunas personas piensan que es mejor hacerlo internamente. De hecho, tengo una clase llamada "LayoutUtil" que mantengo métodos de ayuda relacionados con el diseño para evitar escribir una y otra vez tediosa pieza de código relacionado con el diseño. Aquí está mi código para cargar un UIViewController:
+ (id)loadController:(Class)classType {
NSString *className = NSStringFromClass(classType);
UIViewController *controller = [[classType alloc] initWithNibName:className bundle:nil];
return controller;
}
Y entonces yo sólo puedo hacer:
MyViewController *c = [LayoutUtil loadController:[MyViewController class]];
Si lo desea, puede añadir un método llamado ughhhh a una clase y lo llaman allí, no importa en absoluto. El punto es que no es una mejor práctica llamar a initWithNibName en el método init, solo debes asegurarte de llamarlo en algún momento al iniciar un UIViewController.
- (id)ughhhh
{
self = [super initWithNibName:@"Myview" bundle:nil];
if (self != nil)
{
}
return self;
}
Un archivo de punta definitivamente necesita cargarse más de una vez. Cada vez que llamas a initWithNibName en un UIViewController, tienes que cargar el xib. Mucha gente carga UIViews que no son propiedad de un UIViewController como esto:
[[NSBundle mainBundle] loadNibNamed:@"nameOfXIBFile" owner:self options:nil];
Cada vez que se llama a esta función se le cargando la punta.
Existen ciertos casos en los que se puede almacenar en caché un plumín. Un ejemplo sería una UITableView, pero la vista de tabla implementa su propio caché. El sistema operativo no está haciendo caché automáticamente.
init
y initWithNibName:
están relacionados en que initWithNibName:
llama automáticamente a init en un objeto.
+1, muy bien detallado ... – doNotCheckMyBlog
, gracias por su respuesta detallada y amable asistencia ... – Stanley
Sólo una nota: para asignar a uno mismo, es necesario tener un método que comience con 'init'. Entonces '- (id) initUghhhh' – benaneesh