2015-04-14 2 views
3

Я ищу тип или структуру данных для хранения большого количества примитивов того же типа в моем приложении (Mac OS X или iOS) с использованием Objective C. Как я понял, NSNumber хранит только один примитив (исправьте меня, если я ошибаюсь) , Я имею, скажем, тысячи целых чисел или строк. Что было бы лучшим решением для размещения, хранения и доступа к ним там? NSSet, NSArray, NSMutableArray, NSDictionary, NSMutableDictionary или что-то еще? Я знаю, что у них разные функции, но я в основном забочусь только о выполнении основных операций (установка, хранение, извлечение).Что является самым надежным и быстрым типом или структурой данных для хранения данных с помощью Objective C?

ответ

10

Это зависит только от того, как вы хотите добавлять, хранить и удалять эти данные.

Первый Давайте пройти через каждый тип структуры данных, которая доступна нам в Objective-C:

Примитивный массива

Это самый основной тип хранения в Objective-C (или C), который используется для хранения примитивов. Ex: int a[4] = {1, 2, 3, 4}; Ограничение на это

  • Может хранить только примитивные типы.
  • Размер массива не может быть изменен после объявления.
  • Может быть восстановлен только по его индексу.
  • Может хранить только данные одного типа, определенные во время объявления массива.

NSArray

Это контейнер для хранения объектов. Любой объект, который имеет тип NSObject (или наследует от NSObject) или имеет тип «id», может быть сохранен в NSArray.

  • После инициализации он не может быть изменен, т. Е. Размер массива не может быть изменен, и объекты, которые он содержит, могут быть изменены. Это хорошо с точки зрения безопасности.
  • Объектов доступен только по его указателю.

NSMutableArray

NSArray То же, но

  • Может быть мутировал, то есть существующие объекты могут быть изменены, а также новые объекты могут быть добавлены или удалены.

NSSet

NSArray То же, но

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

NSMutableSet

То же, что NSSet, но

  • Может быть мутантным, то есть объекты могут быть добавлены или удалены в более поздний момент времени.

NSOrderedSet

NSArray То же, то есть объекты хранятся и извлекаются с помощью индекса, но

  • хранит только уникальные объекты.

NSMutableOrderedSet

То же NSMutableArray, но

  • магазины только уникальные объекты.

NSDictionary

может хранить данные любого типа.

  • Объекты хранятся и извлекаются ключом.
  • После инициализации не может быть изменен, т. Е. Не может добавлять новые значения ключа и не обновлять существующие объекты, связанные с определенным ключом.

NSMutableDictionary

То же, что NSDictionary

  • Может быть мутантным, то есть новые объекты могут быть добавлены или удалены, а существующие объекты могут быть изменены.

Это было краткое описание наиболее часто используемых структур данных в Objective-C. Они используются на основе потребности в программе и способах обработки данных.

Поэтому

  • Если вы хотите хранить тысячи чисел и строк и хотите получить доступ к этому его значение индекса используйте NSMutableArray. Если вы не собираетесь добавлять, удалять или изменять какие-либо объекты в будущем, используйте NSArray.
  • Если вы хотите хранить данные, но не хотите, дубликаты и хотите получить доступ к нему по его индексу ЕГЭ NSOrderedSet/NSMutableOrderedSet
  • Если вы хотите хранить данные, но не хотите, дубликаты и порядок его также не имеет значения, то использование NSSet/NSMutableSet.
  • Если вы хотите получить доступ к данным конкретного ключа затем использовать NSDictionary/NSMutableDictionary

Что касается производительности

  • Поскольку NSSet не содержит какой-либо заказ, они более производительные, чем NSArray
  • Here - это очень хорошо спосо и подробные статьи по эксплуатационным характеристикам для каждой структуры данных обсуждалось выше

    Class      Time [ms] 1,000,000 elements 
    

    Добавление

    NSMutableOrderedSet   3190.52 
    NSMutableDictionary   2522.47 
    NSMutableSet    2511.96 
    NSMutableArray    1423.26 
    NSSet       8.03 
    

    Random Access

    NSMutableOrderedSet   10.74 
    NSMutableDictionary   9.18 
    NSMutableArray     8.08 
    NSMutableSet     4.47 
    NSSet       3.56 
    

Чтобы узнать больше о Objective-C Типы данных и структура данных, читать this

+1

Поскольку это очень яркое описание различных типов с различными функциями (хорошее объяснение/напоминание для каждого пользователя), остается открытым вопрос о производительности в реальном времени. Например, хорошее сравнение, но только между NSData и NSArray: http://iwantmyreal.name/blog/2012/09/29/a-faster-array-in-objective-c/ –

+1

Спасибо @DariusMiliauskas, что было оценено ! Я добавил статью о характеристиках производительности для каждой структуры данных, описанной выше. Пожалуйста, взгляните на это. –

+0

Замечательный ответ. Спасибо, что поделился. – arqam