[英]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
。
聽起來您正在嘗試調用類方法。 這些方法已定義為:
代替
加號表示該方法不使用任何字段,因此不需要實例化該對象。
在您的示例中,“對象”是已分配內存並已初始化的類“ NewObject”的實例。 以您的示例為例,“ MyClass”只是一個類,因為它具有如上所述聲明的靜態成員,因此無需實例化。
類方法提供了一種將一堆相關函數組合到一個位置的好方法,而不是像通常在直接C語言中那樣將它們分散在常規名稱空間中。您也可以將類方法和實例方法放在同一個位置類,在需要時使用類,並在需要時實例化類以使用實例。
編輯:更改術語以引用類方法,而不是靜態方法。
類方法類似於C ++靜態方法,因為它們可以在不創建類的具體實例的情況下被調用。 這樣做的用處是您可以調用類的專用工廠方法來創建新實例。 或者,您可以在類的范圍內定義實用程序庫,該類庫可以根據任務提供或不提供具體實例。
看一下NSDate和NSNumber是在Foundation框架中很好的例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.