Runtime 函数库提供了很多函数用于一些操作,本篇主要总结关于属性Property
的操作函数:
1、使用属性
/* 获取属性的名称
*/
const char * _Nonnull property_getName(objc_property_t _Nonnull property);
/* 获取属性的特征
*/
const char * _Nullable property_getAttributes(objc_property_t _Nonnull property);
/* 获取属性的特征数组。
* @param outCount 特征数组的元素数量
* @return 必须使用 free() 函数释放
*/
objc_property_attribute_t * _Nullable property_copyAttributeList(objc_property_t _Nonnull property,unsigned int * _Nullable outCount);
/* 获取指定特征的值。
* @param attributeName 指定特征名称
* @return 如果它不存在于属性中则为nil。
*/
char * _Nullable property_copyAttributeValue(objc_property_t _Nonnull property,const char * _Nonnull attributeName);
2、关联属性
/* 关联引用时的一些选项
*/
typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) {
OBJC_ASSOCIATION_ASSIGN = 0, //指定对关联对象的弱引用。
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, //指定对关联对象的强引用;这种关联不是原子性的。
OBJC_ASSOCIATION_COPY_NONATOMIC = 3, //指定复制关联的对象;这种关联不是原子性的。
OBJC_ASSOCIATION_RETAIN = 01401, //指定对关联对象的强引用;这种关联是原子性的。
OBJC_ASSOCIATION_COPY = 01403 //指定复制关联的对象;这种关联是原子性的。
};
/* 使用指定键和关联选项为指定对象设置关联值。
* @param object 关联的实例对象。
* @param key 关联的键
* @param value 关联的键对应的值;传递 nil 以清除现有关联。
* @param policy 关联的选项
*/
void objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key,
id _Nullable value, objc_AssociationPolicy policy);
/* 获取与指定对象关联的指定键的值。
* @param object 关联的实例对象。
* @param key 关联的键
* @return 与对象的键键关联的值。
*/
id _Nullable objc_getAssociatedObject(id _Nonnull object, const void * _Nonnull key);
/* 移除指定对象的所有关联。
* @note 该函数的主要目的是使指定对象很容易返回到“原始状态”。
* 不应该将此函数用于从对象中删除关联,因为它还会删除添加到对象中的关联。
* 通常使用 objc_setAssociatedObject() 和 nil 值来清除关联。
*/
void objc_removeAssociatedObjects(id _Nonnull object);