我创建了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;
}

08-27 12:12