Хранение обратных вызовов в словаре (Objective C для iPhone) - PullRequest
3 голосов
/ 20 января 2010

Я пытаюсь сохранить обратные вызовы в словаре.

  • Я не могу использовать блоки, так как iPhone не поддерживает это (если вы не используете plblocks).
  • Iпытался использовать функции, но, очевидно, NSMutableDictionary не позволяет эти указатели (хочет идентификатор)
  • Я пытался использовать методы класса, но я не мог найти способ получить указатель на эти
  • Я мог бы попытаться использовать функции с хеш-картой c ++ stl (если она поддерживается в Objective C ++), но, очевидно, это может замедлить время компиляции.
  • Я мог бы попытаться сохранить и класс, и селектор, но это выглядит довольно грязно.

Как лучше всего это сделать?

Ответы [ 4 ]

7 голосов
/ 20 января 2010

Вы можете поместить его в NSInvocation .

NSInvocation - это Цель-C сообщение отображается статическим, то есть оно это действие превращается в объект. NSInvocation объекты используются для хранения и пересылать сообщения между объектами и между приложениями, в первую очередь NSTimer объекты и распределенные система объектов.

4 голосов
/ 20 января 2010

Если вы знаете, что делаете с указателями, вы можете свернуть их с помощью NSValue. Затем вы можете поместить NSValue в словарь.

Для вставки:

[myDict setObject:[NSValue valueWithPointer:functionName] forKey:myKey];

Для поиска:

NSValue* funcVal=(NSValue*) [myDict objectForKey:myKey];
returnType* (*func)()=[funcVal pointerValue];
0 голосов
/ 29 января 2010

Можно скомпилировать один файл с использованием C ++, если вы измените расширение на .mm. Вам не нужно изменять другие файлы в вашем проекте, если они не обрабатывают какие-либо типы C ++.

0 голосов
/ 20 января 2010

Если это ваш собственный проект, почему бы не использовать блоки, поскольку вы можете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...