2012-08-09 94 views
0

我通常都知道,當你想調用一個方法上的另一個對象,這樣做:從另一個類調用方法,在Objective-C

NewObject *object = [NewObject alloc]init];

[object callMethod];

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

自其他類,都是我所要做的就是導入頭該類做:

#import "MyClass.h" 

[MyClass callMethod]; 

在這種情況下,爲什麼我沒有的alloc初始化?它工作得很好。

+0

他們被稱爲類方法,所以你不需要實例化一個對象來調用它們。你需要初始化一個類的實例。 – 2012-08-09 21:23:17

回答

0

這聽起來像你正試圖調用一個類的方法。這些方法已被定義爲:

  • +(void)myStaticMethod;的

代替

  • - (無效)的MyMethod;

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

在您的示例中,「對象」是已分配內存和初始化的類「NewObject」的實例。作爲你的例子,「MyClass」只是一個類,因爲它具有上面聲明的靜態成員,所以不需要實例化。

類的方法提供了一個很好的方式來將一堆相關的函數合併到一個地方,而不是像普通的名字空間那樣將它們分散到常規的名字空間中。您可以同時使用類方法和實例方法放在同一個類中,在需要時使用類方法,並在需要時實例化類以使用實例。

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

+0

靜態和類方法是完全不同的東西。 ObjC沒有靜態方法。 – Max 2012-08-09 18:22:38

+0

最大,謝謝你讓我挺直。我一直將它們稱爲靜態方法,就像C++所稱的那樣,但我在Objective C中使用了錯誤的術語。我編輯了正確的響應。 – PaulPerry 2012-08-09 18:27:47

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. 
+0

我有的方法是一個類方法,但它不返回任何東西。類和實例方法在兩者都不返回時有什麼區別? – Jon 2012-08-09 18:15:08

+0

不同之處在於您是否將該方法應用於類或對象。例如,如果你想調用'stringByAppendingString',你想在現有的'NSString'對象上調用它。你不能將一個字符串追加到一個類中!另一方面,如果你想獲得當前時間,你不需要有一個對象來獲得它。你可以爲此調用'NSDate'類。 – aforaudrey 2012-08-09 18:31:04

+0

哎呀抱歉,我應該給出不返回任何東西的例子。讓我們來看看。讓我編輯我的答案。 – aforaudrey 2012-08-09 18:35:32

0

有「背景」的方法(正常的),有被稱爲物體上,並有機會獲得之間的差異self以及在該類上調用的「類」方法(在許多編程語言中稱爲靜態),因此沒有self

+0

哦,好的。所以在我的課堂上,類方法不會返回任何東西。我是否可以通過將此類設置爲單例,然後在整個應用程序中調用單例方法來完成同樣的任務?哪種方法更好? – Jon 2012-08-09 18:18:22

+0

在這種情況下,類函數比單例更好。如果你有一些必須在不同成員之間共享的變量,單身是一個很好的選擇;如果你只有一個單獨的方法,請使用類函數。 – 2012-08-09 18:20:09

0

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

看看NSDate和NSNumber是基礎框架中的很好的例子。

相關問題