我已经检查了所有这些问题......
...他们解释的是当一个消息被发送到一个类时,实例方法如何在类的实例上使用,并且类方法与类一起使用。这很有帮助,但我很想知道为什么会使用类方法而不是实例方法。
答案 0 :(得分:46)
一般来说,当您需要在特定对象实例上运行的代码时,您应该创建实例方法。当您需要执行一般涉及该类的某些操作时,您可以创建一个类方法,但可能不会对该类的任何特定对象进行操作。
在实践中,您会发现几乎所有方法都应该是实例方法。只需查看任何现有的Objective-C类,如NSString
,NSArray
,UIView
等,您将看到他们的绝大多数方法都是实例方法。类方法的最常见用法(再次,查看我提到的类)是为了方便构造函数,它们返回autorelease
个对象或单例访问器。
考虑length
中的NSString
方法。为什么这是一个实例方法而不是类方法?它是一个实例方法,因为只询问NSString
的特定实例的长度是有意义的。一般要求NSString
一个长度(即长度是一种类方法)是没有任何意义的。
另一方面,假设我们要向NSNumber
添加一个方法,该方法将返回可存储在给定系统上的最大整数值。在这种情况下,它应该是类方法,因为我们只是询问NSNumber
的一般问题,它独立于任何特定实例。