来源:ian(@ianisme)
链接:http://www.ianisme.com/ios/2019.html
本篇描述的内容主要是如何运用runtime机制,调用一些底层的实现方法,动态的获取类的成员变量,属性,方法,以及一些更高级的操作,从而加深对runtime机制的了解。上一篇是基础内容的了解,【传送门-Objective-C Runtime 学习(一)】
获取类的成员变量和属性篇
苍老师在大家心目中应该有很多特征吧,下面我们通过代码来获取苍老师的特征。
People.h文件
12345678910111213 @interface People : NSObject{NSString *_occupation;NSString *_nationality;}@property (nonatomic, copy) NSString *name;@property (nonatomic) NSUInteger age;- (NSDictionary *)allProperties;- (NSDictionary *)allIvars;- (NSDictionary *)allMethods;@end
People.m文件
在main.m中运行以下代码
最后的输出结果如下:
是不是有点失望,我没有加一些特殊的技能,留给下文了。此实战内容是通过苍老师的一些特征学习:如何获取对象所有的属性名称和属性值、获取对象所有成员变量名称和变量值、获取对象所有的方法名和方法参数数量。
6.3 苍老师增加新技能篇
苍老师要通过Category和Associated Objects增加技能了,快看!
创建People+Associated.h文件如下:
People+Associated.m如下:
在main.m中运行以下代码
这次运行结果多出了一个associatedBust(胸围)和一个associatedCallBack(写代码)属性。
如图:
我们成功的给苍老师添加个一个胸围的属性和一个写代码的回调,但是添加属性没有什么意义,我们平时在开发过成功中用的比较多的就是添加回调了。