Primordial init dans la sous-classe
En Objective-C, il est nécessaire de remplacer tous hérité de constructeurs d'une sous-classe d'ajouter personnalisé logique d'initialisation?
Par exemple, serait la suivante correct pour un UIView
sous-classe avec initialisation personnalisée logique?
@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
Vous devez vous connecter pour publier un commentaire.
Chaque Cocoa Touch (et le Cacao) classe a désigné un initialiseur; pour
UIView
, comme indiqué dans cette documentation, cette méthode estinitWithFrame:
. Dans ce cas particulier, vous aurez seulement besoin de remplacerinitWithFrame
; tous les autres appels en cascade vers le bas et frapper cette méthode, finalement.Cela va au-delà de la portée de la question, mais si vous ne finissent par créer un initialiseur avec les paramètres supplémentaires, vous devriez assurez-vous que la désignation de l'initialiseur de la super-classe lors de l'attribution
self
, comme ceci:initWithCoder:
est appelé, et PASinitWithFrame:
.initWithFrame
: "Si vous utilisez l'Interface Builder pour la conception de votre interface, cette méthode n'est pas appelée quand votre visualiser les objets sont ensuite chargés de la plume de fichier."initWithCoder:
est spécial, c'est une partie de laNSCoding
catégorie. Vous êtes bien avec la substitution de la désignée d'initialiseur,initWithFrame:
dans ce cas, PLUSinitWithCoder:
.En général, vous devez suivre les désignés de l'initialiseur de la convention. Désignés initialiseur est l'init, qui couvre l'initialisation de toutes les variables d'instance. Désignés initialiseur est aussi la méthode qui est appelée par d'autres init méthodes d'une classe.
Apple la documentation sur les initialiseurs.
initWithFrame:
est désigné initialiseur de la NSView classe. Apple Cacao documentation toujours mentionne explicitement désignés initialiseur d'une classe.initWithCoder:
est discuté ici DONC.Dans le cas de l'utilisation de l'Interface Builder, l'un est appelé est :