О наборах
В Касании Какао и Какао набор является классом платформы Основы, используемым для того, чтобы сохранить и управлять группами объектов. Его основная роль должна хранить объекты в форме или массива, словаря или набора.
Эти классы упрощают задачу управляющих групп объектов. Наборы основы эффективны и используются экстенсивно OS X и iOS.
Сразу
Наборы совместно используют много характеристик. Большинство наборов содержит только объекты и имеет и непостоянное и неизменный вариант.
Все наборы совместно используют много общих задач, включающих:
Перечисление объектов в наборе
Определение, является ли объект в наборе
Доступ к отдельным элементам в наборе
Непостоянные наборы также позволяют некоторые дополнительные задачи:
Добавление объектов к набору
Удаление объектов от набора
В то время как наборы совместно используют много характеристик, существуют также важные различия. В результате Вы найдете некоторые наборы, лучше подходящие для определенной задачи, чем другие. Поскольку то, как хорошо набор выполняет, зависит от того, как он используется, необходимо выбрать набор, подходящий лучше всего для определенной задачи.
Доступ к индексам и легко перечисление элементов: массивы
Массивы (такой как NSArray
и NSMutableArray
) упорядочиваются наборы, предоставляющие индексный доступ к их содержанию. Вы могли бы использовать массив, чтобы хранить информацию, которая будет представлена в табличном представлении, потому что порядок имеет значение.
Соединение данных с произвольными ключами: словари
Словари (такой как NSDictionary
и NSMutableDictionary
) не упорядочиваются наборы, предоставляющие доступ включенного значения к их содержанию. Они также допускают быструю вставку и операции удаления. Словари полезны для хранения значений, имеющих значение на основе их ключа. Например, у Вас мог бы быть словарь информации о Калифорнии с капиталом как ключ и Сакраменто как соответствующее значение.
Предлагая быструю вставку, удаление и проверки членства: наборы
Наборы (такой как NSSet
, NSMutableSet
, и NSCountedSet
) не упорядочиваются наборы объектов. Наборы допускают быструю вставку и операции удаления. Они также позволяют Вам быстро видеть, является ли объект в наборе. NSSet
и NSMutableSet
наборы хранилища отдельных объектов, в то время как NSCountedSet
хранит набор неотдельных объектов. Например, предположите, что у Вас есть много городских объектов, и Вы хотите посетить каждого только один раз. При хранении каждого города, который Вы посещаете в наборе, можно быстро и легко видеть, посетили ли Вы его.
Хранение подмножеств массивов: индексные наборы
Индексные наборы (такой как NSIndexSet
и NSMutableIndexSet
) объекты помощника, расширяющие возможности массивов. Они позволяют Вам хранить подмножество массива путем хранения индексов в массив, а не путем создания нового массива. Вы могли бы использовать индексный набор, чтобы позволить пользователю выбирать многократные записи из списка записей. Например, предположите, что у Вас есть табличное представление, и Вы позволяете пользователю выбирать некоторые строки. Поскольку строки сохранены как массив, Вы могли сохранить выборы как индексный набор в тот массив.
Хранение путей через вложенные массивы: индексные пути
Индексные пути хранят расположение информации в более сложной иерархии набора, в частности вложенных массивах. Какао обеспечивает NSIndexPath
класс с этой целью. Например, индексный путь 1.4.3.2 указывает путь, показанный здесь:
В то время как они не наборы в самом строгом смысле, индексируют простоту путей задача управления вложенными массивами. UITableView
класс делает широкое применение индексных путей для хранения расположений в табличном представлении.
Настройка параметров памяти и возможностей хранения: классы набора указателя (OS X)
Если Вы нуждаетесь в наборах для хранения произвольных указателей или целых чисел, или должны использовать обнуление слабых ссылок в собравшей «мусор» среде, существует три класса набора указателя: NSPointerArray
, NSMapTable
, и NSHashTable
. Они подобны NSMutableArray
, NSMutableDictionary
, и NSMutableSet
, соответственно. Три класса набора указателя позволяют дополнительные опции для указания, как набор управляет своим содержанием. Можно, например, использовать равенство указателя вместо вызова isEqual:
во время сравнений. В отличие от всех других классов набора, NSPointerArray
позволяется содержать a NULL
указатель.
Работа с наборами: копирование и перечисление
В дополнение к классу определенное поведение существуют некоторые задачи, совместно использующиеся в подобной форме классами набора. Две из этих задач копируют набор и перечисляют его содержание.
Когда необходимо создать новый набор с содержанием другого, можно выбрать или отмель или глубокую копию в другой. В мелкой копии сохраняется каждый объект, когда он добавляется к новому набору, и владение совместно используется двумя или больше наборами. В глубокой копии каждый объект отправляется a copyWithZone:
обменивайтесь сообщениями, как это добавляется к набору вместо того, чтобы быть сохраненным.
Если необходимо проверить каждый элемент в набор для некоторого условия или выполнять некоторое действие с записями выборочно, можно использовать один из предоставленных способов перечислить содержание набора. Два основных метода перечисления являются быстрым перечислением и основанным на блоке перечислением.