Подтвердить что ты не робот

Как использовать #import <NSObjCRuntime.h> для использования objc_msgSend

Я хочу импортировать заголовок среды выполнения для использования objc_msgSend, но я получаю:

error: NSObjCRuntime.h: No such file or directory

Должен ли я добавить что-то к пути поиска заголовка?

4b9b3361

Ответ 1

Вам нужно включить <objc/message.h> (вы найдете соответствующие заголовки в /usr/include/objc) и ссылку на библиотеку objc (/usr/lib/libobjc.dylib).

Ответ 2

#import <Foundation/NSObjCRuntime.h> работает

но вам, вероятно, понадобится

#import <objc/runtime.h>

как этот пример Apple

upd: поскольку iOS 7 #import <Foundation/NSObjCRuntime.h> заменен на #import <objc/NSObjCRuntime.h>, но я рекомендую использовать #import <objc/runtime.h> в любом случае

Ответ 3

При использовании Xcode 6 и более поздних версий вы получите сообщение об ошибке после #include<objc/message.h>. Это можно решить следующим образом:

#include <objc/message.h>
void foo(void *object) {
  typedef void (*send_type)(void *, SEL, int);
  send_type func = (send_type)objc_msgSend;
  func(object, sel_getUid("foo:"), 5);
}

http://devstreaming.apple.com/videos/wwdc/2014/417xx2zsyyp8zcs/417/417_whats_new_in_llvm.pdf