我通常知道,当你想在另一个对象上调用方法时,你会这样做:
NewObject *object = [NewObject alloc]init];
[object callMethod];
但是我创建了一个不是对象本身的类,这意味着它没有属性或内存管理。它有几种计算某些东西的方法。
从任何其他类,我所要做的就是导入此类的标题并执行:
#import "MyClass.h"
[MyClass callMethod];
为什么在这种情况下我不必分配init?它运作得很好。
答案 0 :(得分:1)
因为你正在调用一个类方法。您只需要alloc init
个对象。只需要包含类但不包括alloc init
。因此,您不需要初始化NSString
课程,比如说。
编辑:
让我们举一些无意义的例子:
+ (void)classMethod {
NSLog("Hi!");
}
[SomeClass classMethod]; // prints Hi!
- (void)instanceMethod { // (say it's an instance method of NSString)
NSLog(self);
}
[@"someNSString" instanceMethod]; // prints someNSString. But you need to have a string first, otherwise you cannot use this method.
答案 1 :(得分:0)
“实例”方法(普通方法)之间存在差异,必须在对象上调用并且可以访问self
和“类”方法(在许多编程语言中称为静态),在类上调用的,因此没有self
。
答案 2 :(得分:0)
听起来你正试图调用一个类方法。这些方法定义为:
而不是
加号表示该方法不使用任何字段,因此不需要实例化该对象。
在您的示例中,“object”是已经分配了内存并初始化的类“NewObject”的实例。在哪里 - 作为您的示例,“MyClass”只是一个类,因为它具有如上所述声明的静态成员,因此不需要实例化。
类方法提供了一种很好的方法,可以将一堆相关的函数组合到一个地方,而不是将它们分散在常规命名空间中,这通常是在C语言中完成的。您还可以同时拥有类方法和实例方法在同一个类中,在需要时使用类,并在需要时实例化类以使用实例。
编辑:更改术语以引用类方法而不是静态方法。
答案 3 :(得分:0)
类方法与C ++静态方法类似,因为可以在不创建类的具体实例的情况下调用它们。这样做的用处是可以调用类的专用工厂方法来创建新实例;或者,您可以在类的范围内定义一个实用程序库,该类可能会也可能不会根据任务提供具体实例。
在NS框架中看看NSDate和NSNumber就是很好的例子。