在Objective-C中实例方法和类方法有什么区别?

What's the difference of instance method and class method in Objective-C?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Objective-C: Class vs Instance Methods?
Objective-C - difference between class method and static method?

在objc中,方法名前面的一个破折号表示它是一个实例方法。方法名前面加一个加号表示它是类方法。但是编程有什么区别呢?


类方法和实例方法的区别在于实例方法需要类的实例,在该实例上(一般)操作。调用实例方法的消息必须是发送到类的实例。

类方法最常见的一种用法可能是对象工厂;发送到类以创建实例的消息根据您发送的参数进行配置。例如在cocoa nsstring类有几个名为StringWithSomeThingorOther:这将创建一个新的nsString对象并把它还给你。

另一方面,nsstring也有许多实例方法-如果没有实际的实例一起工作。一个常用的方法可能是长度法,它告诉我们您在特定nsstring实例中有多少个字符消息已发送。

也看到这一点。类方法和实例方法有什么区别?


与这两种方法的主要区别是前者的一个IE只有一个破折号,在它被声明为IE的类的实例调用之前,必须为该类创建一个实例,这意味着该类有一个对象,并且使用.可以调用实例方法。

在类方法中,可以直接使用类名调用后面的方法。要调用类方法,一个dosen不需要任何对象。

请参考苹果开发者文档中的链接


对对象调用实例方法。对类调用类方法。

例如线条:

SomeClass *object = [[SomeClass alloc] init];

在这里,您可以看到"alloc"在"someclass"上工作,而不是在"object"上工作。

鉴于:[object callMyFunction];将作用于"对象",而不是"类"。这是一个实例方法。