在我的上一篇文章中,主要列出了runtime的一些方法和特性,这一篇文章着重讲一讲实现
成员变量、属性
基础数据类型
Ivar
![img_801c2a62a15de6f36fb4ad091f70a78d.png](https://yqfile.alicdn.com/img_801c2a62a15de6f36fb4ad091f70a78d.png)
Ivar是表示实例变量的类型,其实际是一个指向objc_ivar结构体的指针
objc_property_t
![img_4d464fbff4459f0e25a8092e8d8e681c.png](https://yqfile.alicdn.com/img_4d464fbff4459f0e25a8092e8d8e681c.png)
objc_property_t是表示Objective-C声明的属性的类型,其实际是指向objc_property结构体的指针
objc_property_attribute_t
![img_9cc6ef1973aa23b92a934170ece2962d.png](https://yqfile.alicdn.com/img_9cc6ef1973aa23b92a934170ece2962d.png)
objc_property_attribute_t定义了属性的特性(attribute)
成员变量、属性的操作方法
成员变量
成员变量操作包含以下函数:
![img_1c284ce521350a244229b3f8cca2a195.png](https://yqfile.alicdn.com/img_1c284ce521350a244229b3f8cca2a195.png)
获取成员变量名
![img_033e93270608545b213e494ed576c505.png](https://yqfile.alicdn.com/img_033e93270608545b213e494ed576c505.png)
获取成员变量类型编码
![img_6167adc0876188b697dba935200c8f2a.png](https://yqfile.alicdn.com/img_6167adc0876188b697dba935200c8f2a.png)
ptrdiff_t ivar_getOffset ( Ivar v );
![img_aeafaaf2417932137e4abda497b61455.png](https://yqfile.alicdn.com/img_aeafaaf2417932137e4abda497b61455.png)
获取属性名
![img_0d248b21883d353b512e6ad1221c3fd0.png](https://yqfile.alicdn.com/img_0d248b21883d353b512e6ad1221c3fd0.png)
获取属性特性描述字符串
![img_ed4f1344ffbaa474730a38916ad7e490.png](https://yqfile.alicdn.com/img_ed4f1344ffbaa474730a38916ad7e490.png)
获取属性中指定的特性
![img_b630bb262975f21cf36540f64743c327.png](https://yqfile.alicdn.com/img_b630bb262975f21cf36540f64743c327.png)
获取属性的特性列表
property_copyAttributeValue函数,返回的char *在使用完后需要调用free()释放。
property_copyAttributeList函数,返回值在使用完后需要调用free()释放。