2011-06-23 19 views
1

我遇到了解析xml或json的需求,並且必須在表中列出它們。字典或多個數組的數組,這是最好的?

我沒有問題在實現這一點,但我想優化代碼使用較少的內存資源。

問題是最好是有多個數組還是最好有一個數組的內容是字典的單個數組。

請看看下面的例子,其中3名被保存在2種方式

路1

NSArray* names = [NSArray arrayWithObjects: 
        [NSDictionary dictionaryWithObjectsAndKeys: 
        @"rama krishna",@"firstname", 
        @"chunduri",@"surname", 
        nil], 
        [NSDictionary dictionaryWithObjectsAndKeys: 
        @"rama krishna",@"firstname", 
        @"gutta",@"surname", 
        nil], 
        [NSDictionary dictionaryWithObjectsAndKeys: 
        @"selvakumar",@"firstname", 
        @"k",@"surname", 
        nil], 
        nil]; 

路2

NSArray *firstnames=[NSArray arrayWithObjects:@"Rama Krishna",@"Rama Krishna",@"selvakumar",nil]; 
NSArray *surnames=[NSArray arrayWithObjects:@"chunduri",@"gutta",@"k",nil]; 

那麼,哪一個這兩種方式可以優選用於優化內存消耗。

回答

10

你剛剛遇到了一個使用面向對象編程的好地方。

例如,將「firstname」映射到「rama krishna」和「surname」到「gutta」的字典實際上應歸爲一類,其中包含NSString*實例變量,用於姓和名。

例如爲:

@interface Person : NSObject { 
    NSString *firstname; 
    NSString *surname; 
} 

@end 

那麼你就只能Person對象的數組。在大多數情況下,使用起來更容易,而且是「正確」的方式。任何接觸你的代碼的人都會感謝你。

+0

你的解決方案是好的,我提到的名字,姓爲我在最新的應用程序中使用此一個例子。 –

+0

很棒的回答。在iOS中編程總是讓我太專注於使用Cocoa Touch的框架,而這些框架在使用NSArrays和NSDictionaries的時候就會迷失方向,忘記使用正確的面向對象編程。 – darksky

+0

對於現代的Objective-C,您將需要使用代碼示例中給出的屬性而不是ivars! – fatuhoku

0

更好的選擇是加入字典陣列。即一個陣列和多個字典。

// In a loop 
NSMutableDictionary *dictError=[NSMutableDictionary dictionaryWithObjectsAndKeys:maxCount,kID,kUsers,kEntity,[Utils convertDateInString:[NSDate date]],kDate,kTrue,kStatus,kEnter,kDescription, nil]; 
[arrError addObject:dictError]; 

通過這種方式,您可以添加字典作爲數組objects.And得到indvisual disctionary對象:

NSMutableDictionary *nameDictionary = [arrError objectAtIndex:1]; 
NSString *strEntityName = [nameDictionary objectForKey:@"KeyName"]; 
+0

我真的不認爲字典是最好的辦法。你爲什麼不創建一個對象來存儲數據? –

+0

感謝您的建議,所以方式2將減少內存消耗。 –

+0

@Chris:很好說。我所建議的是去尋求一個單一的數組和多個字典,而不是拉瑪所要求的副詞。 – Nitish

相關問題