Runtime函数库中关于属性Property的函数使用

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);

猜你喜欢

转载自blog.csdn.net/weixin_33778544/article/details/87239016