目标C:我的自定义-init方法没有被调用

6 cocoa-touch objective-c

我有一个我从UIView派生的类,我想为它创建一个-init类,如下所示:

- (id) init
{
    if (self = [super init]) {
        // my initializations here
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我知道一个事实 - 没有被调用.这是我在.h中定义的方式:

-(id)init;
Run Code Online (Sandbox Code Playgroud)

有谁知道它为什么不被调用?

附录:

我发现当我在initWithCoder中进行初始化时,它运行得很好.我添加了initWithFrame,但没有调用.

这是我在IB中指定的对象.

NJo*_*nes 13

有两个指定的初始化器UIViewController,UIView它们initWithCoder从中调用nib,并initWithFrame从代码中调用.Init不是这些对象的指定初始值设定项.

如果你想要涵盖两个基础,你可以做这样的事情:

-(void)initializationCodeMethod{
    <#Initialization Code Here#>
}
-(id)initWithFrame:(CGRect)frame{
    if ((self = [super initWithFrame:frame])){
        [self initializationCodeMethod];
    }
    return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder{
    if ((self = [super initWithCoder:aDecoder])){
        [self initializationCodeMethod];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

  • 我从一些Apple示例代码中学到了一个巧妙的技巧:而不是像initializationCodeMethod这样的方法(很容易在子类中轻易覆盖)只是在你的c文件中创建一个静态函数:`static void commonInit(MyClass*self){ ......}`并称之为. (4认同)
  • @Thor我可以问你为什么不接受这个答案? (2认同)