Я не верю, что безопасно обрабатывать его как указатель (даже указатель void
), потому что, если это когда-либо изменится в будущей реализации или другой реализации языка. Я не видел формальной спецификации Objective-C, которая рассказывает, что определяет реализация, но часто, когда используются такие непрозрачные типы, это означает, что вам не нужно знать подробности о базовом типе. Фактически, структура объявлена заранее, так что вы не можете получить доступ ни к одному из ее членов.
Другая проблема, с которой вы можете столкнуться, заключается в реализации сравнений на равенство: ссылки на селекторы на пул констант или изменчивость каждого селектора. Еще раз, реализация определена.
Использование C-строк, как указано выше, вероятно, является лучшим выбором; ruby удается использовать символы для селекторов и не слишком сильно снижает производительность. Поскольку строки const
, lua не требуется для их копирования, но, вероятно, в любом случае они безопасны. Если вы можете найти способ не копировать строки, вы не сильно пострадаете от производительности.