类方法和实例方法的区别是什么?
实例方法是访问器(getter和setter),而类方法几乎是其他所有东西吗?
类方法和实例方法的区别是什么?
实例方法是访问器(getter和setter),而类方法几乎是其他所有东西吗?
当前回答
类方法不能改变或知道任何实例变量的值。这应该是判断实例方法是否可以是类方法的标准。
其他回答
以一款衍生出大量汽车的游戏为例。每个人都属于CCar班。 当一个car被实例化时,它会调用
[CCar registerCar:self]
所以CCar类,可以列出每个实例化的CCar。 让我们假设用户完成了一个关卡,并想要移除所有汽车……你可以: 1-浏览你手动创建的每一个CCar的列表,并执行那个vercar .remove(); 或 2-添加一个removeAllCars方法到CCar,这将为你做,当你调用[CCar removeAllCars]。即allCars [n] .remove ();
或者,例如,你允许用户为整个应用程序指定默认字体大小,在启动时加载和保存。 如果没有类方法,您可能必须执行如下操作
fontSize = thisMenu.getParent().fontHandler.getDefaultFontSize();
使用类方法,你可以使用[FontHandler getDefaultFontSize]。
至于removeVowels函数,你会发现像c#这样的语言实际上都有特定的方法,如toLower或toUpper。
例如myString.removeVowels()和String.removeVowels(myString)(在ObjC中,这将是[String removeVowels:myString])。
在这种情况下,实例很可能调用类方法,因此两者都可用。 即。
public function toLower():String{
return String.toLower();
}
public static function toLower( String inString):String{
//do stuff to string..
return newString;
}
基本上,myString.toLower()调用[String toLower:ownValue]
没有明确的答案,但是如果你觉得加入一个类方法可以改进你的代码,那就试试吧,记住类方法只能让你使用其他类方法/变量。
与大多数其他答案一样,实例方法使用类的实例,而类方法可以只使用类名。在Objective-C中,它们的定义如下:
@interface MyClass : NSObject
+ (void)aClassMethod;
- (void)anInstanceMethod;
@end
它们可以这样使用:
[MyClass aClassMethod];
MyClass *object = [[MyClass alloc] init];
[object anInstanceMethod];
一些真实世界的类方法的例子是许多基础类的方便方法,如NSString的+stringWithFormat:或NSArray的+arrayWithArray:。实例方法是NSArray的-count方法。
对上述答案的更新,我同意实例方法使用类的实例,而类方法可以只使用类名。
在Objective-C中实现自动引用计数后,实例方法和类方法之间不再有任何区别。
例如[NS StringWithformat:..][[NSString alloc] initwithformat:..]]实例方法,两者在ARC之后是一样的
类方法
类方法通常要么创建类的新实例,要么检索类的一些全局属性。类方法不能对实例进行操作,也不能访问实例变量。
实例方法
实例方法对类的特定实例进行操作。例如,您实现的accessors方法都是实例方法。您可以使用它们来设置或获取特定对象的实例变量。
调用
要调用实例方法,需要将消息发送到类的实例。
要调用类方法,可以直接将消息发送给类。
来源:IOS - Objective-C -类方法和实例方法
你的问题的答案并不特定于objective-c,但是在不同的语言中,类方法可能被称为静态方法。
类方法和实例方法之间的区别是
类方法
操作Class变量(它们不能访问实例变量) 不需要一个对象被实例化应用 有时可能是一种代码气味(一些刚接触OOP的人把它作为在面向对象环境中进行结构化编程的拐杖)
实例方法
操作实例变量和类变量 必须对一个实例化对象进行操作