在objective-c中调用另一个类的方法

时间:2012-08-09 18:11:28

标签: iphone objective-c ios cocoa-touch

我通常知道,当你想在另一个对象上调用方法时,你会这样做:

NewObject *object = [NewObject alloc]init];

[object callMethod];

但是我创建了一个不是对象本身的类,这意味着它没有属性或内存管理。它有几种计算某些东西的方法。

从任何其他类,我所要做的就是导入此类的标题并执行:

#import "MyClass.h"

[MyClass callMethod];

为什么在这种情况下我不必分配init?它运作得很好。

4 个答案:

答案 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)

听起来你正试图调用一个类方法。这些方法定义为:

  • +(void)myStaticMethod;

而不是

  • - (void)myMethod;

加号表示该方法不使用任何字段,因此不需要实例化该对象。

在您的示例中,“object”是已经分配了内存并初始化的类“NewObject”的实例。在哪里 - 作为您的示例,“MyClass”只是一个类,因为它具有如上所述声明的静态成员,因此不需要实例化。

类方法提供了一种很好的方法,可以将一堆相关的函数组合到一个地方,而不是将它们分散在常规命名空间中,这通常是在C语言中完成的。您还可以同时拥有类方法和实例方法在同一个类中,在需要时使用类,并在需要时实例化类以使用实例。

编辑:更改术语以引用类方法而不是静态方法。

答案 3 :(得分:0)

类方法与C ++静态方法类似,因为可以在不创建类的具体实例的情况下调用它们。这样做的用处是可以调用类的专用工厂方法来创建新实例;或者,您可以在类的范围内定义一个实用程序库,该类可能会也可能不会根据任务提供具体实例。

在NS框架中看看NSDate和NSNumber就是很好的例子。