2011-05-18 61 views
3

我正在尋找在Objective-C中爲專注於獲取數據的iOS項目創建一個類。我熟悉類通常如何工作,setter和getter方法和變量。然而,對於這個類,因爲它只是執行一個函數(返回NSMutableArrays),我不想創建一個類的實例來使用類中的方法。如何在Objective-C(只有方法的類)中設置非實例化類

任何想法,我可以做到這一點整齊有效?

回答

2

您想製作類方法嗎?

@interface Foo : NSObject {} 
+(NSMutableArray*)someClassMethod:(id)params; 
@end 

... 

@implementation Foo 
+(NSMutableArray*)someClassMethod:(id)params { 
    // whatever implementation 
    return nil; 
} 
@end 

... 

NSMutableArray* array = [Foo someClassMethod:nil]; 
+0

@馬修弗雷德裏克:你在說什麼?這裏寫的類KennyTM只包含類方法。你不需要實例化它,事實上創建一個實例是毫無意義的。當你向班級發送消息時,你*正在和某人講話 - 班級。 – Chuck 2011-05-18 17:35:46

+0

@Chuck顯然,我很喋喋不休,在我喝完咖啡之前不應該回答這些問題 - 沒有注意到他使用了課堂教學法,這可能導致我進一步進入喋喋不休的土地。它已經超過5分鐘了,所以我不能編輯它,所以我要添加一個新的評論,其中的部分是正確的,並且很快就會刪除其他評論以避免將來的混淆(並且可以讓我免於預先全面清醒尷尬)。感謝您的支持。 – 2011-05-18 17:41:44

+0

我只會爲@ mac_55添加一個類,它不需要屬性或實例變量,也不需要getter和setter。 – 2011-05-18 17:42:14

2

如果你只是在執行函數,並且你不需要支持子類等等,爲什麼不把它們寫成C函數而不是帶方法的類呢?

2

如果這只是一個執行某些功能的類,那麼可以將其編寫爲C函數。

在你的頭文件 -

NSMutableArray *functionThatReturnsMutableArray(NSObject *param1, NSString *param2); 

在您的實現文件 -

NSMutableArray *functionThatReturnsMutableArray(NSObject *param1, NSString *param2) 
{ 
    ... 
    return aMutableArray; 
} 

而這僅僅包括類.h文件需要這些功能,並直接調用它們。

NSMutableArray *anArray = functionThatReturnsMutableArray(param1, param2); 
3

這在Objective-C中有點不典型。由於Objective-C中的類實際上不具有普通函數可用的狀態(即沒有類變量),因此在大多數情況下,從未實例化的類相對無用。正常的設計模式的這種功能是:

  • 一個單獨的類(如果你需要大量的狀態)

  • 一組功能(如果你不這樣做)

0

根據你在做什麼(相同的NSString操作,UIView操作等),你可以實現一個類別(我回答a question yesterday與下面的解釋 - 爲了方便複製)。

分類擴展現有的類與其他方法或您的版本現有的方法。例如,假設您要添加一個方法,該方法將字符串的第一個字母返回給NSString。要做到這一點,如下所示,你將創建一個類別:

接口 - JULString.h

#import NSString 

@interface NSString (JULString) 

-(NSString *) firstLetter; 

@end 

實現 - 典型的約定是該類別的文件名是您正在擴展的類的名稱後跟「+」和類別的名稱。在這種情況下,該文件將被稱爲NSString + JULString。米

#import "NSString+JULString.h" 

@implementation NSString (JULString) 

- (NSString *)firstLetter 
{ 
    return [NSString stringWithFormat:@"%C", [self characterAtIndex:1]]; 
} 
@end 

整潔的事情有關類別的是,現在他們延長你正在使用的類的任何實例的行爲。換句話說,應用程序中的任何NSString都會有你的新方法(假設你導入了正確的頭文件)。但要小心,因爲權力巨大,責任重大。覆蓋類使用類別行爲可能會導致不良影響,所以要謹慎。

你可能要檢查的幾個環節是:

注: 我沒有我的Mac跟我,所以我編寫這段代碼基本上不在我的頭頂(並使用上面網站的一些代碼作爲提醒)。所以我提前道歉任何錯誤;)

相關問題