使用instancetype作为Objective-C中副本的返回类型?

use*_*472 9 objective-c clang foundation nscopying instancetype

使用instancetype作为返回值init和相关方法的推荐方法,请参阅最新的clang功能.然而,什么是最好的做法WRT的返回值copyWithZone:NSCopying协议(见本线为以前的最佳做法)?从clang文章中方法的命名方案推断类的规则中没有提到,但我不明白为什么它应该与alloc方法的返回值不同.

类型推断不适用于copy-methods吗?我们还应该返回instancetype或者更确切地说我们实际返回的特定类型吗?

jus*_*tin 15

你不应该使用instancetype.这里明显的例子是,有不可改变的/可变的区别-一个copy一个NSMutableString返回的NSString,你应该当作一成不变的.在这种情况下,API不会返回与接收方相同类型的实例.

另一个原因是你应该匹配声明的签名,正如Josh Caswell所指出的那样(+1).

当然,没有什么能阻止你用自己想要的语义和签名声明自己的协议.