2011-06-23 2 views
1

Я столкнулся с требованием разбора xml или json и должен перечислить их в таблице.Массив словарей или несколько массивов, что лучше?

У меня нет проблем в достижении этого, но я бы хотел оптимизировать код, чтобы использовать меньше ресурсов памяти.

Вопрос в том, что лучше иметь несколько массивов или лучше иметь один массив, содержимое которого - словари.

пожалуйста, посмотрите на следующий пример, в котором 3 имена сохраняются в 2 способами

Way 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]; 

Way 2

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

Итак, что один из этих двух способов можно предпочесть для оптимизации потребления памяти.

ответ

10

Вы только что столкнулись с отличным местом для использования объектно-ориентированного программирования.

Вы, например, словари, которые отображают, например, «первое имя» на «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

Лучшим выбором будет добавить словарь в массиве . т. е. один массив и несколько словарей. Я использовал это в моем Lastest применения:

// 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

Спасибо за предложение suggestion.so 2, что уменьшит потребление памяти. –

+0

@ Крис: Очень хорошо сказано. То, что я предлагаю, заключается в том, чтобы использовать единый массив и несколько словарей вместо вирша, о которых просил Рама. – Nitish

Смежные вопросы