“struct objc_method”类型的不完整定义

时间:2011-09-30 10:17:51

标签: objective-c ios runtime forward-declaration

我真的很困惑这个问题。我需要做的是在我的项目中使用一些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;
}

这类似于前向声明问题还是别的什么?

2 个答案:

答案 0 :(得分:7)

除了Martin回答之外,您应该使用method_getName之类的函数来检索方法classMethods[i]的名称。

这更容易移植(特别是结构中的这些字段,因为宏建议的Objective-C 2.0不再存在),并且可以避免像运行时发展时那样的问题。

答案 1 :(得分:1)

无法访问这些成员! OBJC2_UNAVAILABLE宏表示成员不可用,只提供对结构的一些了解。