Rozszerzenie klasy Objective-C
Jako całkiem nowy programista C (z 4-letnim doświadczeniem w Javie) wydaje mi się, że trudno mi zrozumieć, kiedy używać rozszerzeń klas. Z tego, co zrozumiałem (i proszę, popraw mnie, jeśli się mylę), główna różnica między kategoriami a rozszerzeniami polega na tym, że rozszerzenie oczekuje, że zaimplementujesz metody w głównej implementacji, podczas gdy w kategorii może to być inna implementacja . Wydaje się również, że ludzie używają rozszerzeń głównie do prywatnych metod.
Oto moje pierwsze pytanie. Jaka jest różnica między używaniem rozszerzenia klasy do deklarowania metody prywatnej, a nie deklarowaniem jej w ogóle (wydaje się, że kompiluje się w obu przypadkach)? (przykład 1 vs 2)
Przykład 1
@interface Class()
-(void) bar;
@end
@implementation Class
-(void) foo {
[self bar];
}
-(void) bar {
NSLog(@"bar");
}
@end
Przykład 2
@implementation Class
-(void) foo {
[self bar];
}
-(void) bar {
NSLog(@"bar");
}
@end
Drugie pytanie: Jaka jest różnica między deklarowaniem ivars wewnątrz rozszerzenia a deklarowaniem go bezpośrednio w implementacji? (Przykład 3 vs 4)
Przykład 3
@interface Class() {
NSArray *mySortedArray;
}
@end
@implementation Class
@end
Przykład 4
@implementation Class
NSArray *mySortedArray;
@end
Mam ostatnie pytanie dotyczące konwencji kodowania: kiedy powinienem umieścić podkreślenie (_) przed nazwą zmiennej?
Dziękuję Ci