En Objective-C, est-il nécessaire de surcharger tous les constructeurs hérités d'une sous-classe pour ajouter une logique d'initialisation personnalisée?Surcharge init dans la sous-classe
Par exemple, est-ce que ce qui suit serait correct pour une sous-classe UIView
avec une logique d'initialisation personnalisée?
@implementation CustomUIView
- (id)init {
self = [super init];
if (self) {
[self initHelper];
}
return self;
}
- (id)initWithFrame:(CGRect)theFrame {
self = [super initWithFrame:theFrame];
if (self) {
[self initHelper];
}
return self;
}
- (id)initWithCoder:(NSCoder *)decoder {
self = [super initWithCoder:decoder];
if (self) {
[self initHelper];
}
return self;
}
- (void) initHelper {
// Custom initialization
}
@end
Donc, même si je CustomUIView exemple init simple, il appellera initWithFrame? – hpique
C'est correct. La façon de tester cela serait de remplacer à la fois init: et initWithFrame :, définir les points d'arrêt (ou les instructions NSLog) sur la première ligne de chaque, et l'instance CustomUIView en utilisant init. Vous devriez voir init get hit, suivi de initWithFrame :. –
Ce qu'il est important de se rappeler est que si un objet est instancié à partir d'un NIB, 'initWithCoder:' est appelé, et ** NOT ** 'initWithFrame:'. – Pascal