Хранение структуры C в CFMutableDictionary - PullRequest
4 голосов
/ 30 июля 2009

Поскольку в Core Foundation нет аналога NSValue, как мы должны хранить структуры C в CFMutableDictionary?

Ответы [ 2 ]

6 голосов
/ 30 июля 2009

Во-первых, вы можете поместить NSvalue в CFMutableDictionary как есть, поэтому ответ «используйте NSValue». Но я предполагаю, что остальная часть вашего вопроса «без использования каких-либо объектов Какао». В этом случае просто создайте не сохраняющий CFMutableDictionary, и вы можете поместить в него любой указатель. См. «Определение пользовательских обратных вызовов коллекции» для примера кода. Я часто ими пользуюсь.

Помните, что они все еще должны быть указателями, поэтому вам придется размещать свои структуры в куче, а не в стеке. А это значит, что управление памятью теперь ваша проблема. Конечно, вы можете создать собственный набор обратных вызовов, которые делают все, что вы хотите, поэтому, если вы используете boost или что-то еще с его собственной системой подсчета ссылок, вы все равно можете реализовать это с помощью CFMutableDictionary.

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

1 голос
/ 30 июля 2009

CFMutableDictionary

CFDictionaryAddValue Объект CFType или значение указателя для добавления в словарь.

вы просто передаете указатель на вашу структуру.

...