我创建了uiimageview的一个子类,我想在调用initwithframe、initwithimage或init时添加一些要触发的东西……
-(id) init {
[super init];
NSLog(@"Init triggered.");
}
如果我调用
-initWithFrame:
方法,上面的-init
也会被触发吗? 最佳答案
每个班级都应该有一个designated initialiser。如果UIImageView
遵循这个约定(应该是这样,但我还没有测试过),那么您会发现调用-init
最终会调用-initWithFrame:
。
如果要确保运行init方法,只需重写父类的指定初始化器,如下所示:
-(id) initWithFrame:(CGRect)frame;
{
if((self = [super initWithFrame:frame])){
//do initialisation here
}
return self;
}
或者像这样:
//always override superclass's designated initialiser
-(id) initWithFrame:(CGRect)frame;
{
return [self initWithSomethingElse];
}
-(id) initWithSomethingElse;
{
//always call superclass's designated initializer
if((self = [super initWithFrame:CGRectZero])){
//do initialisation here
}
return self;
}