类方法和实例方法的区别是什么?
实例方法是访问器(getter和setter),而类方法几乎是其他所有东西吗?
类方法和实例方法的区别是什么?
实例方法是访问器(getter和setter),而类方法几乎是其他所有东西吗?
当前回答
我认为最好的理解方法是看一下alloc和init。正是这个解释让我明白了其中的区别。
类方法
类方法作为一个整体应用于类。如果检查alloc方法,它是一个类方法,由方法声明前的+表示。它是一个类方法,因为它应用于类以创建该类的特定实例。
实例方法
使用实例方法修改类的特定实例,该实例是该实例惟一的,而不是整个类惟一的。例如,Init(在方法声明之前用-表示)是一个实例方法,因为您通常在用alloc创建该类之后修改该类的属性。
例子
NSString *myString = [NSString alloc];
调用类方法alloc是为了生成该类的实例。注意消息的接收者是一个类。
[myString initWithFormat:@"Hope this answer helps someone"];
你在修改NSString的实例myString通过在那个实例上设置一些属性。注意消息的接收者是一个实例(NSString类的对象)。
其他回答
类方法通常用于创建该类的实例
例如,[NSString stringWithFormat:@"SomeParameter"];返回一个带参数的NSString实例。因此,因为它是一个返回其类型的对象的Class方法,所以它也被称为方便方法。
你的问题的答案并不特定于objective-c,但是在不同的语言中,类方法可能被称为静态方法。
类方法和实例方法之间的区别是
类方法
操作Class变量(它们不能访问实例变量) 不需要一个对象被实例化应用 有时可能是一种代码气味(一些刚接触OOP的人把它作为在面向对象环境中进行结构化编程的拐杖)
实例方法
操作实例变量和类变量 必须对一个实例化对象进行操作
Instances方法作用于类的实例(即“对象”)。类方法与类相关联(大多数语言使用关键字static来表示这些家伙)。
对上述答案的更新,我同意实例方法使用类的实例,而类方法可以只使用类名。
在Objective-C中实现自动引用计数后,实例方法和类方法之间不再有任何区别。
例如[NS StringWithformat:..][[NSString alloc] initwithformat:..]]实例方法,两者在ARC之后是一样的
类方法
是声明为静态的方法。可以在不创建类实例的情况下调用该方法。类方法只能操作类成员,而不能操作实例成员,因为类方法不知道实例成员。类的实例方法也不能从类方法内部调用,除非在该类的实例上调用它们。
实例方法
另一方面,需要类的实例存在才能调用它们,因此需要使用new关键字创建类的实例。实例方法操作于类的特定实例。实例方法没有被声明为静态的。