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

6

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

- (id) init
{
    if (self = [super init]) {
        // my initializations here
    }
    return self;
}

很不幸,我确信-init没有被调用。以下是我在.h文件中定义它的方式:
-(id)init;

有人知道为什么它没有被调用吗?

补充:

我发现当我把初始化放在initWithCoder中时,它可以正常运行。 我添加了initWithFrame但没有被调用。

这是为IB中指定的对象所做的。


你是否通过调用init来初始化对象? - dimme
你是否有任何已分配此类型并在GUI中使用的UIView? - dimme
1个回答

14

UIViewControllerUIView有两个指定的初始化方法,它们分别是从nib中调用的initWithCoder和从代码中调用的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;
}

5
我从苹果的一些示例代码中学到了一个不错的技巧:不要像初始化代码方法那样容易在子类中意外覆盖,而是在您的c文件中创建一个静态函数:static void commonInit(MyClass *self) { ... } 并调用它。 - Jesse Rusak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接