从Objective-C中的init方法返回类型

时间:2014-03-20 20:08:42

标签: objective-c return-type convenience-methods

在编写Objective-C类时,我使用以下便捷方法结构:

+ (MyClass *) myClass {
    return [[[self alloc] init] autorelease];
}

- (id) init {
    if (self = [super init]) {
        // set-up code here...
    }
    return self;
}

为什么便捷方法应该指定返回类型MyClass*而不是id?或者init方法应指定返回类型?

这似乎是Objective-C代码中的常见模式。直到现在才真正想过它。

2 个答案:

答案 0 :(得分:4)

最好的选择是返回instancetype - 一个上下文关键字,可以用作结果类型来表示方法返回相关的结果类型。
 查看this post on NSHipster.

答案 1 :(得分:3)

我认为instancetype现在是建议的方法:

+ (instancetype) myClass {
    return [[[self alloc] init] autorelease];
}

- (id) init {
    if (self = [super init]) {
        // set-up code here...
    }
    return self;
}