Runtime应用--给分类添加属性

iOS面试经常会被问到:你有用过Runtime吗? 使用Runtime做过什么?

开发中我们会经常使用分类,知道分类中只能添加方法,不能添加属性。今天我们就用Runtime来给分类添加属性。

  • 创建一个类HTFather, 没有任何属性。
@interface HTFather : NSObject

@end
  • 给HTFather添加一个分类,并添加一个name的属性
@interface HTFather (Extention)

@property (copy, nonatomic) NSString *name;

@end

在.m中利用runtime绑定

@implementation HTFather (Extention)

static char *modelNameKey = "htModelNameKey";
-(void)setName:(NSString *)name
{
    objc_setAssociatedObject(self, modelNameKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
-(NSString *)name{
    return objc_getAssociatedObject(self, modelNameKey);
}

@end
  • 测试HTFather是否有了name属性
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    HTFather *father = [[HTFather alloc] init];
    father.name = @"Father";
 }

总结

添加属性的核心函数就是objc_setAssociatedObject和objc_getAssociatedObject。

上传代码到gitHub , 如果你喜欢我的文章,记得star,给予我继续写作的动力。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 9,082评论 7 64
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,806评论 0 9
  • objc_getAssociatedObject返回与给定键的特定对象关联的值。ID objc_getAssoci...
    有一种再见叫青春阅读 5,568评论 0 7
  • runtime 和 runloop 作为一个程序员进阶是必须的,也是非常重要的, 在面试过程中是经常会被问到的, ...
    made_China阅读 4,925评论 0 7
  • 2006年6月15日 《当藏羚羊看见火车》 南方周末 美国作家迈克尔·波伦:“如今荒野必须依赖文明的屋顶才能留存。...
    北修平岡阅读 5,873评论 0 0