Параметры указателя на функцию

Cocoa

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

iOS Примечание: Указатель классов коллекций и соответствующие параметры недоступны на iOS.

Основы Указателя коллекции

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

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

  • NSPointerFunctionsStrongMemory, который используется для коллекции, которая выражает право собственности на свое содержание. В среде сборки мусора это используется для коллекции, которая содержит сильные ссылки на свое содержание.
  • NSPointerFunctionsZeroingWeakMemory, часто используется для коллекции, которая содержит слабые ссылки на объекты в среде сборки мусора. Если сбор мусора не включен, коллекция будет содержать, не сохраненные указатели объектов.
  • NSPointerFunctionsOpaqueMemory, который используется в тех случаях, когда право собственности на содержимое полностью управляется за пределами коллекции. Он часто используется для коллекций, которые содержат указатели на примитивные типы, такие как целые или C-строки.

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

  • NSPointerFunctionsObjectPersonality, который используется для коллекции, которая содержит объекты и использует isEqual: для определения равенства.
  • NSPointerFunctionsObjectPointerPersonality, который часто используется для коллекции, которая содержит объекты и использует прямое сравнение с целью определения равенства.
  • NSPointerFunctionsOpaquePersonality, который часто используется для коллекции, которая содержит указатели на примитивные типы, такие как целые или C-строки.

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

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

Настройка указателя коллекций для хранения объектов

Если вы хотите настроить указатель коллекцию на хранение объектов, есть несколько вариантов. Для объектов, только два персональных варианта имеет смысл:

  • NSPointerFunctionsObjectPersonality, выбор объекта по умолчанию, используется метод isEqual: для определения равенства.
  • NSPointerFunctionsObjectPointerPersonality, также является жизнеспособным вариантом, использует указатель равенства для определения равенства.

Вы также можете использовать любую сильную (strong) память или обнуляемую слабую (weak) память. При сборе мусора, сильная память не утилизируется в коллекторе, но объекты проводятся только в слабой памяти. В среде, без сбора мусора, выбор опции NSPointerFunctionsStrongMemory обязывает вашу коллекцию использовать retain и release. Если вы решите использовать сильную память, вы можете выбрать, хотите ли вы иметь объекты, которые будут скопированы, при добавлении в коллекцию.

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

NSPointerFunctionsOptions collectionOptions= NSPointerFunctionsObjectPersonality
          | NSPointerFunctionsZeroingWeakMemory;

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

Настройка указателей Коллекции для произвольного использования указателей

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

  • NSPointerFunctionsIntegerPersonality держать указатели на целые.
  • NSPointerFunctionsStructPersonality держать указатели на структуры. Если вы укажете эту опцию, вы должны установить свойство sizeFunction у NSPointerFunctions объекта, который вы используете.
  • NSPointerFunctionsCStringPersonality держать указатели на C-строки.

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

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

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

NSPointerFunctionsOptions collectionOptions= NSPointerFunctionsOpaquePersonality
          | NSPointerFunctionsOpaqueMemory;

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

 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac