我想知道何时以及何时不使用类方法和实例方法。我需要一些实际的例子。我真的很困惑。另一个问题:我们不能用类方法的实例方法做同样的事情吗?
答案 0 :(得分:2)
如果要使用实例对象或实例变量,则必须使用实例方法。 Bcz在类中,您无法访问Instance实例objet或实例变量。
类方法是静态方法。
答案 1 :(得分:1)
类方法:该方法不依赖于任何特定对象。在某种程度上,它就像类的命名空间中的自由函数一样。没有'自我'指针。例如,[UIScreen mainScreen]是一种类方法,因为只有一个屏幕,并且不需要关心多个“屏幕实例”。
实例方法:绑定到特定对象。
这适用于大多数OO语言,而不仅仅是obj-C。
答案 2 :(得分:1)
在实现级别,实例方法调用包含指向数据结构(对象)的隐藏指针,而类方法则不包含。
要问的一个实际问题是,您的调用是否需要向调用发送一些特定数据,这些数据最好被封装为对象内的实例数据,或者不是。
您(通常)可以使用类方法作为实例方法执行相同的操作,但是您必须在调用中显式地将对象作为可见参数传递,这看起来更加丑陋并且还可能禁用某些方法覆盖功能。 Objective C语言。
答案 3 :(得分:1)
为实用程序函数使用类方法,为面向对象的东西使用Instance方法。 例如。对于数学计算(例如sin x),使用类方法。但是,为了调用特定于对象的行为,请使用实例方法..
答案 4 :(得分:1)
顾名思义的类方法与类有关。您可以使用特定类的名称调用它们。这些可以是一类通常暴露的方法。 例如 的的NSArray 强>
+ (id)arrayWithArray:(NSArray *)array;
。
您可以使用类名NSArray调用它。您期望的只是创建该特定类的类型的对象。这不需要调用对象。这些都是非常基本的方法,因此最好将其作为一种类方法。
另一方面,顾名思义的实例方法非常依赖于实例。 Object是一个封装类的状态(ivars)和行为(方法)的实体。这可能非常特定于对象。 例如
- (NSUInteger)count;
让我们采取 NSArray * a 和 NSArray * b 。如果 a 包含5个项目而 b 包含4个项目,则调用这些实例的实例方法将产生不同的结果。这就是为什么我们需要在调用实例方法时初始化实例。它们处理被调用对象的上下文(或状态)。它们也没有暴露,因为类方法是。
希望这会有所帮助。