我正在尋找在Objective-C中爲專注於獲取數據的iOS項目創建一個類。我熟悉類通常如何工作,setter和getter方法和變量。然而,對於這個類,因爲它只是執行一個函數(返回NSMutableArrays),我不想創建一個類的實例來使用類中的方法。如何在Objective-C(只有方法的類)中設置非實例化類
任何想法,我可以做到這一點整齊有效?
我正在尋找在Objective-C中爲專注於獲取數據的iOS項目創建一個類。我熟悉類通常如何工作,setter和getter方法和變量。然而,對於這個類,因爲它只是執行一個函數(返回NSMutableArrays),我不想創建一個類的實例來使用類中的方法。如何在Objective-C(只有方法的類)中設置非實例化類
任何想法,我可以做到這一點整齊有效?
您想製作類方法嗎?
@interface Foo : NSObject {}
+(NSMutableArray*)someClassMethod:(id)params;
@end
...
@implementation Foo
+(NSMutableArray*)someClassMethod:(id)params {
// whatever implementation
return nil;
}
@end
...
NSMutableArray* array = [Foo someClassMethod:nil];
如果你只是在執行函數,並且你不需要支持子類等等,爲什麼不把它們寫成C函數而不是帶方法的類呢?
如果這只是一個執行某些功能的類,那麼可以將其編寫爲C函數。
在你的頭文件 -
NSMutableArray *functionThatReturnsMutableArray(NSObject *param1, NSString *param2);
在您的實現文件 -
NSMutableArray *functionThatReturnsMutableArray(NSObject *param1, NSString *param2)
{
...
return aMutableArray;
}
而這僅僅包括類.h文件需要這些功能,並直接調用它們。
NSMutableArray *anArray = functionThatReturnsMutableArray(param1, param2);
這在Objective-C中有點不典型。由於Objective-C中的類實際上不具有普通函數可用的狀態(即沒有類變量),因此在大多數情況下,從未實例化的類相對無用。正常的設計模式的這種功能是:
一個單獨的類(如果你需要大量的狀態)
一組功能(如果你不這樣做)
根據你在做什麼(相同的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跟我,所以我編寫這段代碼基本上不在我的頭頂(並使用上面網站的一些代碼作爲提醒)。所以我提前道歉任何錯誤;)
@馬修弗雷德裏克:你在說什麼?這裏寫的類KennyTM只包含類方法。你不需要實例化它,事實上創建一個實例是毫無意義的。當你向班級發送消息時,你*正在和某人講話 - 班級。 – Chuck 2011-05-18 17:35:46
@Chuck顯然,我很喋喋不休,在我喝完咖啡之前不應該回答這些問題 - 沒有注意到他使用了課堂教學法,這可能導致我進一步進入喋喋不休的土地。它已經超過5分鐘了,所以我不能編輯它,所以我要添加一個新的評論,其中的部分是正確的,並且很快就會刪除其他評論以避免將來的混淆(並且可以讓我免於預先全面清醒尷尬)。感謝您的支持。 – 2011-05-18 17:41:44
我只會爲@ mac_55添加一個類,它不需要屬性或實例變量,也不需要getter和setter。 – 2011-05-18 17:42:14