Nie lepiej zadzwonić initWithNibName:
pośrednio poprzez init . Chcesz tylko zadzwonić pod numer initWithNibName:
w pewnym momencie. Możesz to zrobić zewnętrznie lub wewnętrznie. Niektórzy uważają, że lepiej jest robić to wewnętrznie. W rzeczywistości mam klasę o nazwie "LayoutUtil", w której stosuję metody pomocnicze związane z układem, aby uniknąć pisania żmudnego fragmentu kodu związanego z układem w kółko. Oto mój kod załadować UIViewController:
+ (id)loadController:(Class)classType {
NSString *className = NSStringFromClass(classType);
UIViewController *controller = [[classType alloc] initWithNibName:className bundle:nil];
return controller;
}
A potem mogę po prostu zrobić:
MyViewController *c = [LayoutUtil loadController:[MyViewController class]];
Jeśli chcesz, możesz dodać metodę zwaną ughhhh do klasy i nazywają go tam, to w ogóle nie ma znaczenia. Chodzi o to, że nie jest lepszą praktyką wywoływanie initWithNibName w metodzie init, ale po prostu chcesz się upewnić, że wywołasz ją w pewnym momencie podczas inicjowania kontrolera UIViewController.
- (id)ughhhh
{
self = [super initWithNibName:@"Myview" bundle:nil];
if (self != nil)
{
}
return self;
}
Plik stalówka na pewno może trzeba załadować więcej niż jeden raz. Za każdym razem, gdy wywołujesz initWithNibName na kontrolerze UIViewController, należy wczytać xib. Wiele osób załadować UIViews, które nie są własnością UIViewController tak:
[[NSBundle mainBundle] loadNibNamed:@"nameOfXIBFile" owner:self options:nil];
każdym razem wywołać tę funkcję zostanie załadowany stalówkę.
Istnieją pewne przypadki, w których stalówka może być buforowana. Przykładem może być UITableView - ale widok tabeli implementuje własną pamięć podręczną. System operacyjny nie wykonuje automatycznie buforowania.
init
i initWithNibName:
są powiązane tym, że initWithNibName:
automatycznie wywołuje init na obiekcie.
+1, bardzo dobrze szczegółowe ... – doNotCheckMyBlog
dziękuję za szczegółową odpowiedź i pomoc w naturze ... – Stanley
Tylko uwaga: aby przypisać do siebie, trzeba mieć metodę zaczynającą się od 'init'. Więc '- (id) initUghhhh' – benaneesh