今天终于抽出时间复习一下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是获取的类方法
先写这么多吧,有时间在改。时间紧,有写错的请多多指教