通过运行时动态给OC分类添加属性

本文介绍如何在iOS开发中为UIImageView分类动态添加字符串属性,并通过Objective-C运行时的关联对象功能实现自定义getter和setter方法。
#import <UIKit/UIKit.h>

/**
 iOS 开发中,分类默认不允许保存属性
 
 如果在分类中,定义一个属性,需要自己实现 getter & setter 方法,而且没有 _成员变量
 
 如果在自己开发的框架中,希望在分类中动态添加属性,可以通过 OC 运行时的关联对象的功能!
 
 运行时非常重要的一个应用:给分类动态添加属性,结果能够让框架包装的更好,让使用者做出最小的修改!
 */
@interface UIImageView (WebImage)

@property (nonatomic, copy) NSString *urlString;

@end
#import <objc/runtime.h>

@implementation UIImageView (WebImage)

const void *URLStringKey = "URLStringKey";

- (void)setUrlString:(NSString *)urlString {

    /**
     参数:
     1. 属性的持有者
     2. 属性的键值
     3. 属性的数值
     4. 属性的引用类型
     */
    objc_setAssociatedObject(self, URLStringKey, urlString, OBJC_ASSOCIATION_COPY_NONATOMIC);
//void objc_setAssociatedObject(id object,Void* key , id  value,object_AssociationPolicy policy) }
- (NSString *)urlString { return objc_getAssociatedObject(self, URLStringKey);
//
objc_getAssociatedObject(id object, void* key)
} @end

 

转载于:https://www.cnblogs.com/741162830qq/p/4636358.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值