1

似乎每当我们需要初始化一个对象时,我们都需要立即编写

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

有更短的方法吗?甚至可以通过宏?

4

2 回答 2

3

您可以少写一行,但不再建议这样做:

- (id) init {

    if((self = [super init])){
        // initialize ivars
    }
    return self;
}

样板是样板,不幸的是,初始化器所做的每一件事:分配(或超类的指定初始化器)self的结果,检查is not ,初始化 ivars 和返回(无论是有效对象)都是必要的。[super init]selfnilselfnil

为了节省自己的打字时间,您可以在 Xcode 中制作代码片段。

于 2012-04-23T04:14:50.577 回答
2

不,您必须在指定的初始化程序中执行所有这些操作,因此没有简单的捷径。

从理论上讲,您可以走宏路线,但宏不会很漂亮,而且对您的代码的读者来说是违反直觉的。

#define BEGIN_INIT self=[super init];if(self){
#define END_INIT }return self

-(id) init {
    BEGIN_INIT;
    // initialize values here
    END_INIT;
}

这段代码并没有短多少,其他人也不太熟悉。我强烈推荐反对它。

于 2012-04-23T04:12:00.630 回答