根据clang documentation,当id
是以instancetype
或new
开头的类方法时,隐含地知道返回alloc
的方法返回retain
,或以autorelease
,init
,self
或instancetype
开头的实例方法。
为了保持一致性,是否还应编写这些方法以在新代码中显式返回- (instancetype)init {
self = [super init];
if (self) {
// perform initialization
}
return self;
}
?
{{1}}
有没有关于为什么或为什么没有或任何推理的文件?在这种情况下,它似乎与编译器完全相同。
答案 0 :(得分:18)
实际上并不是必需的,因为编译器会自动地促使这些方法有效地返回instancetype
(如你所说)。
llvm文档中记录了此automatic inference。
个人?我总是明确地将它们声明为instancetype
,因为它完全描述了合同,并且以后更容易重构。