我真的很困惑这个问题。我需要做的是在我的项目中使用一些obj-c运行时功能。这是我的.m文件中的简单代码:
#import "Base.h"
#import <objc/runtime.h>
@implementation Base
- (void)someMethod {
NSUInteger numberMethods = 0;
Method *classMethods = class_copyMethodList([self class], &numberMethods);
for (int i = 0; i < numberMethods; i ++) {
classMethods[i]->method_name; //incomplete definition of type "struct objc_method"
}
@end
我收到以下错误:“struct objc_method”类型的定义不完整。在检查了objc / runtime.h文件后,我发现了类似的内容:
一些代码......
typedef struct objc_method *Method;
......一些代码......
struct objc_method {
SEL method_name OBJC2_UNAVAILABLE;
char *method_types OBJC2_UNAVAILABLE;
IMP method_imp OBJC2_UNAVAILABLE;
}
这类似于前向声明问题还是别的什么?
答案 0 :(得分:7)
除了Martin回答之外,您应该使用method_getName
之类的函数来检索方法classMethods[i]
的名称。
这更容易移植(特别是结构中的这些字段,因为宏建议的Objective-C 2.0不再存在),并且可以避免像运行时发展时那样的问题。
答案 1 :(得分:1)
无法访问这些成员! OBJC2_UNAVAILABLE宏表示成员不可用,只提供对结构的一些了解。