无论对象是从nib加载还是以编程方式创建,执行初始化代码的正确方法是什么?

时间:2010-01-24 21:09:15

标签: iphone objective-c interface-builder nib

我注意到如果你从一个nib加载连接的视图,你必须覆盖initWithCoder,如果你想添加初始化代码,因为指定的初始化程序没有被调用(这确实有意义),如果你没有从nib加载视图,然后需要在指定的初始化程序中执行相同的代码。

因此,为了处理这两种情况,两种方法都需要相同的初始化代码。

这是我迄今为止提出的最佳解决方案,但我不得不怀疑是否有更传统的方法来做到这一点。这段代码在UITableViewCell子类中,但它可以是任何UIView:

/*
 * Seems like there should be a standard method for this already.
 */
- (void)didFinishInitializingOrUnacrhiving {
    /*** Do stuff that makes the most sense to do in an initializer. ***/
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:aDecoder]) {
        [self didFinishInitializingOrUnacrhiving];
    }
    return self;
}

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        [self didFinishInitializingOrUnacrhiving];
    }
    return self;
}

所以对此有什么看法?这是做事的“正确方法”,这里有潜在的陷阱吗,还是我完全错过了什么?

2 个答案:

答案 0 :(得分:2)

我在另一个答案中解释了这一点,请参阅Does interface builder use the init method to initialize view controllers?

答案 1 :(得分:1)

我做同样的事情,除了我很懒,我的方法通常被称为-didInit