我想导入运行时的标头以使用objc_msgSend,但我得到了:
error: NSObjCRuntime.h: No such file or directory
我应该在标题搜索路径中添加内容吗?
答案 0 :(得分:58)
您需要添加<objc/message.h>
(您会在/usr/include/objc
中找到相关标题)并链接到objc
(/usr/lib/libobjc.dylib
)库。
答案 1 :(得分:36)
#import <Foundation/NSObjCRuntime.h>
确实有效
但你可能需要
#import <objc/runtime.h>
upd:因为iOS 7 #import <Foundation/NSObjCRuntime.h>
已替换为#import <objc/NSObjCRuntime.h>
,但我仍建议使用#import <objc/runtime.h>
答案 2 :(得分:1)
使用Xcode 6及更高版本时,#include<objc/message.h>
后会出现错误。它可以像这样解决
#include <objc/message.h>
void foo(void *object) {
typedef void (*send_type)(id, 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