设置关联对象AssociatedObject

来源:互联网 发布:淘宝卖家贷款在哪里 编辑:程序博客网 时间:2024/04/28 05:34

通常我们需要添加新的方法时,会给一个类添加分类,这样我们可以动态的为原有类添加新的方法,而不需要继承原有类,提高了执行效率。但是分类只能添加方法,不能添加属性,那么我们需要给分类添加属性的时候就可以用到关联对象了。
关联对象有下面这几种方法:

/**  * 设置关联对象 *  * @param 需要被关联的对象 * @param key 关联对象的key 一般这样设置static char key; * @param value 被关联对象的属性,如果设置nil,就取消关联 * @param policy 关联策略,相当于属性的内存管理语义 */OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)    __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);/**  * 获取关联对象 *  * @param object 被关联的对象 * @param key 关联对象的key *  * @return 返回关联属性的值 *  * @see objc_setAssociatedObject */OBJC_EXPORT id objc_getAssociatedObject(id object, const void *key)    __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);
/**  * 移除关联对象 */OBJC_EXPORT void objc_removeAssociatedObjects(id object)    __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);

例如,给NSObject (AssociatedObject)添加关联属性

- (void)setName:(NSString *)name {    objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}
- (NSString *)name {    return objc_getAssociatedObject(self, _cmd);}

这样只需要给关联对象赋值就可以了

NSString *str = @"associatedString";str.name = @"mm";
0 0
原创粉丝点击