不要使用instancetype
。显而易见的情况是有不可变/可变的区别——对于NSMutableString
的copy
返回一个NSString
,你应该将其视为不可变的。在这种情况下,API不会返回与接收器相同类型的实例。
另一个原因是你应该匹配声明的签名,正如Josh Caswell指出的那样(+1)。
当然,没有什么能阻止你声明自己的协议以获得你想要的语义和签名。
copyWithZone:
方法;这个方法已经被协议声明过了,如果你的类声称遵循该协议,那么它也采用了现有的声明。该声明使用id
作为返回类型。instancetype
与id
*相兼容,因此你可以在定义中写出它们,但严格来说最好使用与声明完全相同的类型。id
。
instancetype
作为其返回类型定义的copyWithZone:
方法。