写类别时,我应该使用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
,请参阅有关如何正确实施它的文档。
写 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
,请参阅有关如何正确实施它的文档。