Я пишу класс Objective-C, но он использует API, написанный на C. Это в основном отлично, поскольку смешивание вызовов C с вызовами Objective-C вызывает несколько проблем.Смешивание функций C в классе Objective-C
Однако один из вызова API требует вызова обратно метод (пример):
success = CFHostSetClient(host, MyCFHostClientCallBack, &context);
Где MyCFHostClientCallBack
функция C определяется следующим образом:
static void MyCFHostClientCallBack(CFHostRef host, CFHostInfoType typeInfo, const CFStreamError *error, void *info);
- Может/Как я вместо этого вместо метода Objective-C?
- Могу ли я смешивать функции C с вызовами Objective-C?
- Как использовать функции C с помощью методов Objective-C?
Функции C не должны находиться за пределами '@ implementation'. – 2011-04-17 12:11:17
@Bavarious: компилятор позволяет вам уйти с функциями внутри '@ implementation', но он по-прежнему не является частью' @ implementation', поскольку функции не могут принадлежать классу. В качестве стиля я оставляю его вне '@ implementation' и рекомендую другим делать то же самое, чтобы сделать это ясно. –
На самом деле функции C внутри блоков @implementation имеют уникальное свойство иметь доступ к закрытым и защищенным ivars напрямую. Таким образом, по собственному опыту, стало сильным идиомом размещать функции C, которые «принадлежат» классу внутри соответствующей реализации. Я бы рекомендовал обновить ваш ответ. –