簡體   English   中英

從Objective-C中的另一個類調用方法

[英]Calling methods from another class in objective-c

我通常知道,當您想在另一個對象上調用方法時,您會執行以下操作:

NewObject *object = [NewObject alloc]init];

[object callMethod];

但是我創建了一個不是對象本身的類,這意味着它沒有屬性或內存管理。 它有幾種計算某些內容的方法。

從任何其他類中,我要做的就是導入該類的標頭並執行以下操作:

#import "MyClass.h"

[MyClass callMethod];

為什么在這種情況下我不必分配init? 它工作正常。

因為您正在調用類方法。 您只需要分配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.

必須在對象上調用並可以訪問self “實例”方法(普通方法)與在類和對象上調用的“類”方法(在許多編程語言中稱為靜態方法)之間是有區別的。因此沒有self

聽起來您正在嘗試調用類方法。 這些方法已定義為:

  • +(無效)myStaticMethod;

代替

  • -(無效)myMethod;

加號表示該方法不使用任何字段,因此不需要實例化該對象。

在您的示例中,“對象”是已分配內存並已初始化的類“ NewObject”的實例。 以您的示例為例,“ MyClass”只是一個類,因為它具有如上所述聲明的靜態成員,因此無需實例化。

類方法提供了一種將一堆相關函數組合到一個位置的好方法,而不是像通常在直接C語言中那樣將它們分散在常規名稱空間中。您也可以將類方法和實例方法放在同一個位置類,在需要時使用類,並在需要時實例化類以使用實例。

編輯:更改術語以引用類方法,而不是靜態方法。

類方法類似於C ++靜態方法,因為它們可以在不創建類的具體實例的情況下被調用。 這樣做的用處是您可以調用類的專用工廠方法來創建新實例。 或者,您可以在類的范圍內定義實用程序庫,該類庫可以根據任務提供或不提供具體實例。

看一下NSDate和NSNumber是在Foundation框架中很好的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM