在编写类别时,我应该使用self还是类别名称

时间:2016-11-28 16:55:04

标签: ios ios-extensions

编写NSString类别/扩展名时,如果我使用

,这是否重要
return [self stringWithFormat:units[i], value/10.0];

return [NSString stringWithFormat:units[i], value/10.0];

使用self是否有优势,或者是这些用户首选项之一

1 个答案:

答案 0 :(得分:3)

(我假设有问题的扩展方法是一种类方法。似乎有一些混乱会导致投票失败;这是一个非常好的问题。)

作为一般规则,您应在此处使用self。这样,如果子类重写了该方法,您将使用该方法的子类版本。子类可以覆盖类方法,就像它们可以覆盖实例方法一样。

那就是说,NSString是一种有趣的案例,因为它是一个类集群,因此它的任何隐藏子类都会覆盖这个类方法会非常令人惊讶(并且自己子类化它本身就很棘手)。所以在实践中,NSString,几乎可以肯定无关紧要。但作为一项规则,你有正确的直觉:使用self除非你明确想要使用子类的实现。

有一个很大的例外:+initialize。你需要对你所在的课程非常周到,因为这可能被多次调用。如果您要覆盖+initialize,请参阅有关如何正确实施该文档的文档。