Init in Unterklasse überschreiben
In Objective-C, ist es notwendig, die Vorrang vor allen geerbten Konstruktoren einer Unterklasse, um eigene Initialisierungs-Logik?
Würden zum Beispiel die folgenden sein richtig für einen UIView
Unterklasse mit eigene Initialisierungs-Logik?
@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
InformationsquelleAutor der Frage hpique | 2010-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jeder Cocoa Touch (und Kakao) Klasse hat einen designierten Initialisierer; für
UIView
wie gesagt in dieser Dokumentation, dass die Methode istinitWithFrame:
. In diesem speziellen Fall, müssen Sie nur überschreibeninitWithFrame
; alle anderen Anrufe werden Kaskade nach unten und drücken Sie diese Methode, irgendwann.Diese geht über den Rahmen der Frage, aber wenn Sie am Ende erstellen Sie eine benutzerdefinierte Initialisierung mit zusätzlichen Parametern, sollten Sie sicherstellen, dass der designierte Initialisierer der Oberklasse bei der Vergabe
self
wie diese:InformationsquelleAutor der Antwort Sam Ritchie
Im Allgemeinen sollten Sie die designierten Initialisierer-Konvention. Der designierte Initialisierer ist die init, das umfasst die Initialisierung aller Instanzvariablen. Der designierte Initialisierer ist auch die Methode, die aufgerufen wird, die von anderen init-Methoden einer Klasse.
Apple Dokumentation über die vorgesehenen Initialisierungen.
initWithFrame:
den designierten Initialisierer von der NSView-Klasse. Apples Cocoa-Dokumentation immer explizit erwähnt den designierten Initialisierer einer Klasse.initWithCoder:
diskutiert hier auf SO.InformationsquelleAutor der Antwort Thomas Zoechling
Im Falle der Verwendung von Interface Builder, der einem genannt wird, ist :
InformationsquelleAutor der Antwort letanthang