簡短的回答:
The iOS Developer Collections Reference。
原委:
我認爲這將是採取一些與collections處理的基礎類的更廣泛的外觀是一個好主意,比如NSArray
,NSSet
,NSDictionary如果你感覺特別深奧,CFBag
。
你的問題建議你可以從一般的可可圖案讀了受益。事實上,你可以將任何事物從一個物體傳遞給另一個物體。一個NSArray
實例肯定沒有不同於幾個NSString
實例。
例如,假設我們有一個名爲「PassingData」 (GitHub link)的應用程序。我要定義一個有我們數據的類,在這種情況下,有幾個「energyEnhancer」字符串。
@interface PDDataSource : NSObject
@property (nonatomic, strong) NSString *engergyEnhancer;
@property (nonatomic, strong) NSString *engergyEnhancer2;
@property (nonatomic, strong) NSString *engergyEnhancer3;
@end
然後在我們的視圖控制器,我們可以嘗試訪問能量增強劑,像這樣:
- (void)logDataSourceWithStrings {
NSLog(@"Energy enhancer 1: %@", self.dataSource.energyEnhancer);
NSLog(@"Energy enhancer 2: %@", self.dataSource.energyEnhancer2);
NSLog(@"Energy enhancer 3: %@", self.dataSource.energyEnhancer3);
}
另一種方式來做到這一點,像這樣:
- (void)logDataSourceWithArray {
for(NSInteger i = 0; i < self.dataSource.enhancers.count; i++) {
NSLog(@"Enhancer %i: %@", i, self.dataSource.enhancers[i]);
}
}
的加入使用數組的好處在於,您不再受編譯時聲明的變量數量的限制。您的遊戲或健身應用程序的功能更強大。
這是一種訪問數據的另一個對象的一種方式。其他強有力的競爭者是委託協議,通知和回調塊。通常,如果您直接訪問另一個類中的數據,則可能執行以下三種操作之一:
- 合成:創建一個包含多個存在的對象以幫助父類的類。
- 訪問一個單例。單例類是普遍可訪問的類,只能實例化一次。他們有爭議,但有適當的用例。
- 在一個對象中存儲臨時狀態。
如果你想模擬多種類型的數據,可以考慮在字典中嵌套你的值(不管是數組,字符串,數字還是其他)。不過,情況並非總是如此。我不希望我所有的課程都有一個NSDictionary
屬性。用你最好的判斷力。
另一個很好的策略是建模時使用Xcode中的plist編輯器來模擬對象。然後,您可以用代碼創建一個與plist匹配的類(或類)。
真的很值得花時間熟悉這些慣例和Cocoa Design Patterns。 Lotsa運氣!
爲什麼不能有一個屬性,字符串數組? –
我必須在視圖控制器之間傳遞數據。所以如果nsarray可以這樣做,我會非常樂意這樣做。 –
是的,我認爲這是NNL說的最好的方式。 –