In Objective-C ist es erforderlich, alle geerbten Konstruktoren einer Unterklasse zu überschreiben, um benutzerdefinierte Initialisierungslogik hinzuzufügen?Init in Unterklasse überschreiben
Zum Beispiel würde das Folgende für eine UIView
Unterklasse mit benutzerdefinierter Initialisierungslogik korrekt sein?
@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
Also selbst wenn ich Instanz CustomUIView mit einfachen init, wird es Initwithframe nennen? – hpique
Das ist richtig. Die Möglichkeit, dies zu testen, besteht darin, sowohl init: als auch initWithFrame: zu überschreiben, in der ersten Zeile Haltepunkte (oder NSLog-Anweisungen) und init die Instanz CustomUIView festzulegen. Sie sollten sehen, dass init zuerst und dann initWithFrame: aktiviert wird. –
Was zu beachten ist, ist, dass, wenn ein Objekt von einer NIB instanziiert wird, 'initWithCoder:' aufgerufen wird, und ** NOT ** 'initWithFrame:'. – Pascal