美文网首页iOS Developer
iOS利用runtime给分类添加属性

iOS利用runtime给分类添加属性

作者: 李二侠 | 来源:发表于2017-07-05 15:16 被阅读52次

在项目开发中,有时候会觉得某些类属性不够用或者想给一些类添加属性,例如给UIImageView添加一个name的属性,用来给UIImageView取名字(这里只是举例子,实际情况根据自己需要添加)。
一般情况下我们可以通过写一个类继承UIImageView,然后给这个类添加一个name属性既可,但是如果只是多添加一个属性就重新写一个类的话,总感觉略显麻烦,毕竟有时候还是习惯用系统的UIImageView。这个时候我们就可以利用runtime在UIImageView的分类里面创建了。

1.首先创建一个UIImageView的分类:


屏幕快照 2017-07-05 下午2.36.09.png

2.在.h声明一个name的属性:


屏幕快照 2017-07-05 下午2.39.17.png
如果不在.m文件里用runtime做一些处理,在controller里面直接如下
屏幕快照 2017-07-05 下午2.42.41.png

使用这个name属性的话(ps:使用之前要导入"UIImageView+newProperty.h"),程序会崩溃。

3.为了能够正常使用这个属性,runtime就登场了。在UIImageView+newProperty.m中导入#import <objc/runtime.h>

先声明一个key值,下面会用到

static char * nameKey = "nameKey";
#pragma mark 动态添加新属性,需要手动实现setter和getter方法
/*
 
 id object:一般在分类中创建属性,直接写self即可
 const void *key:给这个属性独一无二的一个key值,一般用创建的key的地址即可或者也可以直接用这个声明的key
 id value:就是你声明的name属性
 objc_AssociationPolicy :点击源文件,里面的几个类型应该都能看的懂吧,根据自己声明的属性进行适当的选择

 objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
 
 */
- (void)setName:(NSString *)name
{
    //将name和其对应key关联起来
    objc_setAssociatedObject(self, &nameKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)name
{
    //根据key值对到对应value
    return objc_getAssociatedObject(self, &nameKey);
}

4.做完这些之后,就可以在需要的地方引用了。
例如:

 UIImageView * imgView = [UIImageView new];
 imgView.name = @"路飞";

这样就可以给UIImageView取名字了,当然实际要根据自己的需要添加

相关文章

  • iOS runtime 动态添加属性,方法,方法交换案例

    iOS runtime 动态添加属性,方法,方法交换案例 动态添加属性 我之前写过分类的文章,说过,分类不能添加成...

  • runtime

    最近在研究runtime,所以就简单记录下我的一些收获吧算是 利用runtime通过分类添加类属性 iOS类扩展:...

  • iOS关联对象技术原理

    iOS 通过 runtime 的 API 可以给分类添加属性,关联属性总共有下边3个 API 通过 runtime...

  • iOS利用runtime给分类添加属性

    在项目开发中,有时候会觉得某些类属性不够用或者想给一些类添加属性,例如给UIImageView添加一个name的属...

  • runtime的理解(二)

    主要内容 利用 runtime 交换方法 利用 runtime 动态添加方法 利用 runtime 动态添加属性 ...

  • ios 利用runtime给分类动态添加属性

    1、分类默认是不能添加属性的,这里我们用runtime实现给分类添加属性,本例给UIView添加一个string属...

  • runtime相关

    修改系统方法 动态添加方法 动态给系统类添加属性(给分类添加属性) runtime+kvc 转换模型

  • runtime 分类不能添加属性

    分类不能添加属性,类别可以,添加runtime之后,可以添加属性

  • UIButton添加block回调

    给UIButton新建一个分类,利用runtime添加block 使用

  • ios中给分类添加属性

    ios中利用类别给已有的类扩展方法是可以的,但是如果直接的添加属性是会报错的。利用runtime可以达到添加属性的...

网友评论

    本文标题:iOS利用runtime给分类添加属性

    本文链接:https://www.haomeiwen.com/subject/cqkqhxtx.html