Опции функции указателя
Классы набора указателя (NSPointerArray
, NSMapTable
, и NSHashTable
) позвольте Вам далее настраивать набор для адаптации его в соответствии с памятью и потребностями хранения. Опции, указанные NSPointerFunctionsOptions
обеспечьте удобный интерфейс для настройки, как набор управляет указателями, которые это содержит.
Основные принципы набора указателя
Наборы указателя сконфигурированы с помощью опций от трех различных категорий: параметры памяти, опции индивидуальности и копирование поведения. Не все комбинации памяти, индивидуальности и копирования опций допустимы.
Параметры памяти указывают ожидаемое поведение для того, когда элементы добавляются к набору, удалили из набора или скопировали. Несколько более общих опций включают:
NSPointerFunctionsStrongMemory
, который используется для набора, содержащего сильные ссылки к его содержанию.NSPointerFunctionsZeroingWeakMemory
, который используется для набора, содержащего слабые ссылки на его содержание.NSPointerFunctionsOpaqueMemory
, когда владением содержания управляют полностью вне набора, который используется для случаев. Это часто используется для наборов, содержащих указатели на типы примитивов, такие как целые числа или струны до.
Опции индивидуальности указывают тип указателей, сохраненных в наборе, таких как указатели на объекты или указатели на другие типы данных. Они также указывают то, что происходит для тестов равенства и хеширования. Несколько более общих опций включают:
NSPointerFunctionsObjectPersonality
, который используется для набора, содержащего объекты и использованиеisEqual:
определить равенство.NSPointerFunctionsObjectPointerPersonality
, который часто используется для набора, содержащего объекты и использующего прямое сравнение для определения равенства.NSPointerFunctionsOpaquePersonality
, который часто используется для набора, содержащего указатели на типы примитивов, такие как целые числа или струны до.
Опции копии указывают, должен ли набор скопировать элементы, ввел в набор. Если NSPointerFunctionsCopyIn
опция указана, набор копирует вводимые элементы; иначе, это не делает.
Если Вам нужна большая настройка, чем NSPointerFunctionsOptions
позвольте, можно использовать NSPointerFunctions
класс для определения пользовательских функций для операций как выделение памяти, хеширование и тестирование равенства. Например, если у Вас есть набор struct
s, необходимо было бы указать размер struct
.
Конфигурирование наборов указателя для содержания объектов
Если Вы хотите сконфигурировать набор указателя для содержания объектов, существует несколько опций. Для объектов целесообразны только две опции индивидуальности:
NSPointerFunctionsObjectPersonality
, объектная опция по умолчанию, использованиеisEqual:
метод для определения равенства.NSPointerFunctionsObjectPointerPersonality
, также жизнеспособный вариант, равенство указателя использования для определения равенства.
Можно также принять решение использовать или сильные ссылки или обнуляющий слабые ссылки. Если Вы принимаете решение использовать сильные ссылки, можно также выбрать, хотите ли Вы, чтобы объекты были скопированы, когда они добавляются к набору.
Например, если Вы хотите, чтобы набор содержал слабые ссылки на объекты и использование isEqual:
для определения равенства можно указать опции следующим образом:
NSPointerFunctionsOptions collectionOptions = NSPointerFunctionsObjectPersonality |
| NSPointerFunctionsZeroingWeakMemory; |
После указания опций, collectionOptions
может тогда быть передан набору во время инициализации.
Конфигурирование наборов указателя для произвольного использования указателя
Если Вы хотите сконфигурировать набор указателя для содержания произвольных (необъектных) указателей, у Вас есть некоторая гибкость для конфигурирования набора на основе типа указателя, который будет содержать набор. Для наибольшей гибкости можно выбрать NSPointerFunctionsOpaquePersonality
, который позволяет Вам содержать указатели на наиболее типы примитивов. Можно также выбрать одну из специфичных для типа опций:
NSPointerFunctionsIntegerPersonality
содержит целочисленные указатели.NSPointerFunctionsStructPersonality
содержит указатели на структуры. При указании этой опции, необходимо установитьsizeFunction
свойствоNSPointerFunctions
возразите, что Вы используете.NSPointerFunctionsCStringPersonality
содержит указатели на струны до.
Необходимо обычно использовать NSPointerFunctionsOpaqueMemory
при контакте с произвольными указателями, потому что это совместимо со всеми опциями индивидуальности. Если Вы должны, можно использовать NSPointerFunctionsMallocMemory
или NSPointerFunctionsMachVirtualMemory
с непрозрачным, струной до и лицами структуры, несмотря на то, что это обычно не рекомендуется.
Единственные произвольные конфигурации указателя, поддерживающие копию - в поведении, являются струной до и лицами структуры или при использовании malloc или при использовании виртуальной памяти Маха.
Если Вы хотите, чтобы набор содержал произвольные указатели с помощью непрозрачной памяти, можно указать опции следующим образом:
NSPointerFunctionsOptions collectionOptions = NSPointerFunctionsOpaquePersonality |
| NSPointerFunctionsOpaqueMemory; |
После указания опций, collectionOptions
может тогда быть передан набору во время инициализации.