编写NSString类别/扩展名时,如果我使用
,这是否重要return [self stringWithFormat:units[i], value/10.0];
或
return [NSString stringWithFormat:units[i], value/10.0];
使用self
是否有优势,或者是这些用户首选项之一
答案 0 :(得分:3)
(我假设有问题的扩展方法是一种类方法。似乎有一些混乱会导致投票失败;这是一个非常好的问题。)
作为一般规则,您应在此处使用self
。这样,如果子类重写了该方法,您将使用该方法的子类版本。子类可以覆盖类方法,就像它们可以覆盖实例方法一样。
那就是说,NSString
是一种有趣的案例,因为它是一个类集群,因此它的任何隐藏子类都会覆盖这个类方法会非常令人惊讶(并且自己子类化它本身就很棘手)。所以在实践中,NSString
,几乎可以肯定无关紧要。但作为一项规则,你有正确的直觉:使用self
除非你明确不想要使用子类的实现。
有一个很大的例外:+initialize
。你需要对你所在的课程非常周到,因为这可能被多次调用。如果您要覆盖+initialize
,请参阅有关如何正确实施该文档的文档。