Возможно смешивание методов и функций C и Objective-C. Вот простой пример использования SQLite API в приложении для iPhone:
Загрузить файл Zip (09_MySQLiteTableView.zip)
Функции C должны быть объявлены вне @implementation
в файле Objective-C (.m).
int MyCFunction(int num, void *data)
{
//code here...
}
@implementation
- (void)MyObjectiveCMethod:(int)number withData:(NSData *)data
{
//code here
}
@end
Поскольку функция C находится за пределами @implementation
, она не может вызывать такие методы, как
[self doSomething]
и не имеет доступа к ивару.
Это можно обойти, если функция обратного вызова принимает параметр типа userInfo
или context
, обычно типа void*
. Это можно использовать для отправки любого объекта Objective C в функцию C.
Как и в примере кода , этим можно манипулировать с помощью обычных операций Objective-C.
Кроме того, пожалуйста, прочитайте этот ответ: Смешивание функций C в классе Objective-C