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

When writing a category, should i use self or the category name

写 NSString category/extension 时,是否使用

有关系吗
return [self stringWithFormat:units[i], value/10.0];

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

使用 self 是否有优势,或者这是用户偏好之一

(我假设有问题的扩展方法是 class 方法。似乎有一些混淆导致了否决票;这是一个很好的问题。)

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

也就是说,NSString 是一种有趣的情况,因为它是一个 class 集群,因此它的任何隐藏子 class 被覆盖都将是非常令人惊讶的这个 class 方法(你自己使用 subclass 充其量是棘手的)。所以在实践中,对于 NSString,这几乎肯定无关紧要。但通常,您的直觉是正确的:使用 self 除非您明确 不想 使用 subclass 的实现。

有一个很大的例外:+initialize。您需要仔细考虑您所处的 class ,因为这可能会被多次调用。如果您要覆盖 +initialize,请参阅有关如何正确实施它的文档。