应该在alloc/new/init方法上使用instancetype吗?

wjl*_*wjl 13 objective-c clang instancetype

按照铛文件,返回一个方法id是隐含已知返回instancetype时,它是一类方法开头newalloc,或实例方法开头retain,autorelease,init,或self.

为了保持一致性,是否还应该编写这些方法以instancetype在新代码中明确返回?

- (instancetype)init {
    self = [super init];
    if (self) {
        // perform initialization
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

有没有关于为什么或为什么没有或任何推理的文件?在这种情况下,它似乎与编译器完全相同.

bbu*_*bum 18

它实际上并不是必需的,因为编译器会自动地促使这些方法instancetype有效地返回(如你所说).

llvm文档中记录了此自动推断.

亲身?我总是声明它们是instancetype明确的,因为它确切地描述了合同,它使得以后更容易重构.

  • @ gnasher729请参阅llvm中的instancetype文档(http://clang.llvm.org/docs/LanguageExtensions.html).对于某些方法,会自动推断出`instancetype`,因此,在这些情况下,`instancetype`是默认值. (2认同)