C中实例方法与类方法的目的

Purpose of Instance Methods vs. Class Methods in Objective-C

我查过所有这些问题…

  • 差分类和实例方法
  • 类方法和实例方法之间的区别?
  • 类方法和实例方法有什么区别?

…他们所解释的是实例方法如何用于类的实例,并且当消息发送到类时,类方法与类一起使用。这很有帮助,但我很好奇为什么要使用类方法而不是实例方法。


一般来说,当需要对对象的特定实例进行操作的代码时,应该创建实例方法。当需要做一些通常涉及该类但可能不在该类的任何特定对象上操作的事情时,可以创建一个类方法。

在实践中,您会发现几乎所有的方法都应该是实例方法。只要看看现有的Objective-C类,比如NSStringNSArrayUIView等,你就会发现它们的绝大多数方法都是实例方法。类方法的最常见用法(同样,请看我提到的类)是为了方便返回autorelease对象的构造函数或单例访问器。

考虑NSString中的length方法。为什么这是实例方法而不是类方法?它是一个实例方法,因为询问NSString的特定实例的长度是有意义的。一般来说,询问NSString的长度(即,如果长度是一个类方法)是没有意义的。

另一方面,假设我们要向NSNumber添加一个方法,它将返回可以存储在给定系统上的最大整数值。在这种情况下,它应该是一个类方法,因为我们只是在问一个与任何特定实例无关的NSNumber的一般问题。