W przykładzie firmy Apple widziałem to:Co to jest (NSNull *) kontroler == [NSNull null] ma zrobić? Dlaczego nie tylko kontroler == zero?
myController *controller = [viewControllers objectAtIndex:page];
if ((NSNull *)controller == [NSNull null]) {
controller = [[myController alloc] initWithPageNumber:page];
[viewControllers replaceObjectAtIndex:page withObject:controller];
[controller release];
}
Jestem bardzo zainteresowany w tej linii:
if ((NSNull *)controller == [NSNull null]) {
Jeśli bym zrobił, to bym po prostu sprawdzić zero. Dlaczego robią to tak cholernie skomplikowane? A co to właściwie robi? Wygląda na to, że przesyłają obiekt kontrolera do NSNull, a następnie sprawdzają, czy jest on taki sam jak null z NSNull.
A.F.A.I.K. zero oznacza "brak obiektu", a zero oznacza "nic". Proszę, pomóż mi, aby uzyskać wyraźny obraz tutaj!
Dzięki. Czy kontroler (NSNull *) przesyła kontroler do NSNull? Pomyślałem, że istnieje operator isKindOfClass lub coś w tym stylu. – Thanks
Wykonanie porównania wskaźnika jest szybsze (w czasie wykonywania) niż wywołanie isKindOfClass, ale to powinno działać, tak jak robiłbym [controller isEqual: [NSNull null]]. Jeśli uznano kontroler za "id", nie trzeba nawet rzutowania, aby uniknąć ostrzeżenia kompilatora. –