获取一个类的所有实例方法

今天终于抽出时间复习一下runtime的知识,先做个笔记吧防止以后再忘了,以后再详细记录下。
先创建一个Person类,设名字和手机号公开,年龄和身份证号私有
.h文件

@interface Person : NSObject
{
    NSString *phone;
}
@property (nonatomic, copy) NSString *name;

- (void)haveHouse;
+ (void)haveCar;

@end

.m文件

@interface Person ()
{
    NSString *idCard;
}
@property (nonatomic) NSInteger age;

@end

@implementation Person

- (void)haveHouse {
    
}
+ (void)haveCar {
    
}
@end

在ViewController中验证

- (void)personTest {
   /**
    Class lenderClass = [Person class];
    获取不到所有类方法(包含h和m文件)
    可以获取到.m中私有实例方法(但不能获取到.h中的实例方法)以及所有property修饰的变量(包含.h和.m中)
    */
   Class lenderClass = [Person class];
   unsigned int num , i;
   //class_copyMethodList  作用是获取一个类的所有实例方法
   Method *methodList = class_copyMethodList(lenderClass, &num);
   for (i = 0; i

打印结果:

2018-10-09 11:10:41.970717+0800 1204 - TestRunTime[9733:402007] method:haveHouse
2018-10-09 11:10:41.970958+0800 1204 - TestRunTime[9733:402007] method:.cxx_destruct
2018-10-09 11:10:41.971200+0800 1204 - TestRunTime[9733:402007] method:name
2018-10-09 11:10:41.971396+0800 1204 - TestRunTime[9733:402007] method:setName:
2018-10-09 11:10:41.971801+0800 1204 - TestRunTime[9733:402007] method:setAge:
2018-10-09 11:10:41.971973+0800 1204 - TestRunTime[9733:402007] method:age

说明[Person class](使用objc_getClass("Person")相同效果)获取不到所有类方法(包含h和m中的),但是可以获取到.m中实例方法,但不能获取到.h中的实例方法(可以将.m中的实例方法隐藏,保留.h中的实例方法试一下)以及所有property修饰的变量(包含.h和.m中)

若想获取Person中的类方法,则可以使用object_getClass([Person class]),接下来验证一下

/**
     Class lenderClass = object_getClass([Person class])
     可以且只能获取到该类的.m中所有类方法
     */
    Class lenderClass = object_getClass([Person class]);
    unsigned int num , i;
    Method *methodList = class_copyMethodList(lenderClass, &num);
    for (i = 0; i

打印结果

2018-10-09 11:25:25.645549+0800 1204 - TestRunTime[9825:410384] method:haveCar

而- (void)haveHouse则没有打印出来,说明object_getClass是获取的类方法
先写这么多吧,有时间在改。时间紧,有写错的请多多指教

你可能感兴趣的:(获取一个类的所有实例方法)