Опции функции указателя

Классы набора указателя (NSPointerArray, NSMapTable, и NSHashTable) позвольте Вам далее настраивать набор для адаптации его в соответствии с памятью и потребностями хранения. Опции, указанные NSPointerFunctionsOptions обеспечьте удобный интерфейс для настройки, как набор управляет указателями, которые это содержит.

Основные принципы набора указателя

Наборы указателя сконфигурированы с помощью опций от трех различных категорий: параметры памяти, опции индивидуальности и копирование поведения. Не все комбинации памяти, индивидуальности и копирования опций допустимы.

Параметры памяти указывают ожидаемое поведение для того, когда элементы добавляются к набору, удалили из набора или скопировали. Несколько более общих опций включают:

Опции индивидуальности указывают тип указателей, сохраненных в наборе, таких как указатели на объекты или указатели на другие типы данных. Они также указывают то, что происходит для тестов равенства и хеширования. Несколько более общих опций включают:

Опции копии указывают, должен ли набор скопировать элементы, ввел в набор. Если NSPointerFunctionsCopyIn опция указана, набор копирует вводимые элементы; иначе, это не делает.

Если Вам нужна большая настройка, чем NSPointerFunctionsOptions позвольте, можно использовать NSPointerFunctions класс для определения пользовательских функций для операций как выделение памяти, хеширование и тестирование равенства. Например, если у Вас есть набор structs, необходимо было бы указать размер struct.

Конфигурирование наборов указателя для содержания объектов

Если Вы хотите сконфигурировать набор указателя для содержания объектов, существует несколько опций. Для объектов целесообразны только две опции индивидуальности:

Можно также принять решение использовать или сильные ссылки или обнуляющий слабые ссылки. Если Вы принимаете решение использовать сильные ссылки, можно также выбрать, хотите ли Вы, чтобы объекты были скопированы, когда они добавляются к набору.

Например, если Вы хотите, чтобы набор содержал слабые ссылки на объекты и использование isEqual: для определения равенства можно указать опции следующим образом:

NSPointerFunctionsOptions collectionOptions = NSPointerFunctionsObjectPersonality
          | NSPointerFunctionsZeroingWeakMemory;

После указания опций, collectionOptions может тогда быть передан набору во время инициализации.

Конфигурирование наборов указателя для произвольного использования указателя

Если Вы хотите сконфигурировать набор указателя для содержания произвольных (необъектных) указателей, у Вас есть некоторая гибкость для конфигурирования набора на основе типа указателя, который будет содержать набор. Для наибольшей гибкости можно выбрать NSPointerFunctionsOpaquePersonality, который позволяет Вам содержать указатели на наиболее типы примитивов. Можно также выбрать одну из специфичных для типа опций:

Необходимо обычно использовать NSPointerFunctionsOpaqueMemory при контакте с произвольными указателями, потому что это совместимо со всеми опциями индивидуальности. Если Вы должны, можно использовать NSPointerFunctionsMallocMemory или NSPointerFunctionsMachVirtualMemory с непрозрачным, струной до и лицами структуры, несмотря на то, что это обычно не рекомендуется.

Единственные произвольные конфигурации указателя, поддерживающие копию - в поведении, являются струной до и лицами структуры или при использовании malloc или при использовании виртуальной памяти Маха.

Если Вы хотите, чтобы набор содержал произвольные указатели с помощью непрозрачной памяти, можно указать опции следующим образом:

NSPointerFunctionsOptions collectionOptions = NSPointerFunctionsOpaquePersonality
          | NSPointerFunctionsOpaqueMemory;

После указания опций, collectionOptions может тогда быть передан набору во время инициализации.