如何#import <nsobjcruntime.h>使用objc_msgSend </nsobjcruntime.h>

时间:2011-02-04 09:40:08

标签: objective-c ios

我想导入运行时的标头以使用objc_msgSend,但我得到了:

error: NSObjCRuntime.h: No such file or directory

我应该在标题搜索路径中添加内容吗?

3 个答案:

答案 0 :(得分:58)

您需要添加<objc/message.h>(您会在/usr/include/objc中找到相关标题)并链接到objc/usr/lib/libobjc.dylib)库。

答案 1 :(得分:36)

#import <Foundation/NSObjCRuntime.h>确实有效

但你可能需要

#import <objc/runtime.h>

like this Apple example does

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