类方法和实例方法的区别是什么?
实例方法是访问器(getter和setter),而类方法几乎是其他所有东西吗?
类方法和实例方法的区别是什么?
实例方法是访问器(getter和setter),而类方法几乎是其他所有东西吗?
当前回答
Instances方法作用于类的实例(即“对象”)。类方法与类相关联(大多数语言使用关键字static来表示这些家伙)。
其他回答
类方法
是声明为静态的方法。可以在不创建类实例的情况下调用该方法。类方法只能操作类成员,而不能操作实例成员,因为类方法不知道实例成员。类的实例方法也不能从类方法内部调用,除非在该类的实例上调用它们。
实例方法
另一方面,需要类的实例存在才能调用它们,因此需要使用new关键字创建类的实例。实例方法操作于类的特定实例。实例方法没有被声明为静态的。
对上述答案的更新,我同意实例方法使用类的实例,而类方法可以只使用类名。
在Objective-C中实现自动引用计数后,实例方法和类方法之间不再有任何区别。
例如[NS StringWithformat:..][[NSString alloc] initwithformat:..]]实例方法,两者在ARC之后是一样的
补充上述答案
Class方法将在Class上工作,我们将它用于一般用途,如+stringWithFormat,类的大小,最重要的是用于init等
NSString *str = [NSString stringWithFormat:@"%.02f%%",someFloat];
实例方法对一个类的实例起作用,而不是对一个类起作用,比如我们有两个人,我们想知道每个人的余额,这里我们需要使用实例方法。因为它不会返回一般响应。例如,确定NSSArray的计数等。
[johnson getAccountBalance];
[ankit getAccountBalance];
以一款衍生出大量汽车的游戏为例。每个人都属于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]
没有明确的答案,但是如果你觉得加入一个类方法可以改进你的代码,那就试试吧,记住类方法只能让你使用其他类方法/变量。
所有的技术细节都已经在其他答案中很好地涵盖了。我只是想分享一个简单的类比,我认为它很好地说明了类和实例之间的区别:
类就像房子的蓝图:你只有一个蓝图,(通常)你不能单独用蓝图做那么多。
实例(或对象)是您根据蓝图构建的实际房屋:您可以从相同的蓝图构建许多房屋。然后,您可以为每个房子的墙壁涂上不同的颜色,就像您可以独立地更改类的每个实例的属性而不影响其他实例一样。