写在前面:

  动态增加属性也不是很肆意的增加,是需要代码进行写的。如果一个类没有那个属性,那么在编译阶段就会报错而导致无法进行。之所以还叫做动态添加大致上是因为可以不重写某个类,而进行相应的属性的添加吧!不扯那么多了。切入正题:

   首先需要创建类别,用来写入相应的set/get方法。

#import <UIKit/UIKit.h>@interface UILabel (Associate)- (void) setFlashColor:(UIColor *) flashColor;- (UIColor *) getFlashColor;@end

UILabel+Associate.h

  重点来了,实现:

#import "UILabel+Associate.h"
#import <objc/runtime.h>@implementation UILabel (Associate)static char flashColorKey;- (void) setFlashColor:(UIColor *) flashColor{objc_setAssociatedObject(self, &flashColorKey, flashColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}- (UIColor *) getFlashColor{return objc_getAssociatedObject(self, &flashColorKey);
}@end

UILabel+Associate.m

  调用:

UILabel *lab = [[UILabel alloc] init];[lab setFlashColor:[UIColor redColor]];NSLog(@"%@", [lab getFlashColor]);

View Code

  由此可见:使用runtime进行属性的添加实际上是通过“OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)”进行添加的。

  一个纯C的方法,传入一个OC的对象,根据一个Key设置一个Value,这就是整个的方法。

思考:

  。。。总觉得那个C函数的实现里面有个大容器。。。(仅为个人想的。。)

注:代码来自http://www.cnblogs.com/luoguoqiang1985/p/3551966.html

    

转载于:https://www.cnblogs.com/madordie/p/4149293.html

iOS 动态添加属性方法相关推荐

  1. iOS Category 添加属性实现原理 - 关联对象

    iOS Category 添加属性实现原理 - 关联对象 RunTime为Category动态关联对象 使用RunTime给系统的类添加属性,首先需要了解对象与属性的关系.对象一开始初始化的时候其属性 ...

  2. 我的Python学习笔记(四):动态添加属性和方法

    一.动态语言相关概念 1.1 动态语言 在运行时代码可以根据某些条件改变自身结构 可以在运行时引进新的函数.对象.甚至代码,可以删除已有的函数等其他结构上的变化 常见的动态语言:Object-C.C# ...

  3. js给对象动态添加属性的2种方法

    js给对象动态添加属性的2种方法 需求: 要给每个课程添加一个判断鼠标是否hover 分析: 因为数据是动态渲染的,所以需要动态的给他添加一个flag标记,就得在数据渲染之前先拿到,然后再添加一个自己 ...

  4. 20170702-变量说明,静态方法,类方法区别,断点调试,fork,yield协程,进程,动态添加属性等。。...

    概念: 并行:同时运行 并发:看似同时运行  json后任然中文的问题 import jsond = {"名字":"初恋这件小事"}new_d1 = json. ...

  5. Python面型对象--重载运算符与动态添加属性

    魔术方法 在Python中以两个下划线开头的方法,__init__.__str__.__doc__.__new__等,被称为"魔术方法"(Magic methods).魔术方法在类 ...

  6. Java动态生成类以及动态添加属性 本篇文章来源于 Linux公社网站(www.linuxidc.c

    2019独角兽企业重金招聘Python工程师标准>>> 有个技术实现需求:动态生成类,其中类中的属性来自参数对象中的全部属性以及来自参数对象propertities文件. 那么技术实 ...

  7. Runtime(动态添加属性)

    2019独角兽企业重金招聘Python工程师标准>>> 下面通过一个实例展示一下Runtime(动态添加属性)的用法 下面对运行时添加属性用到的策略参数进行补充: 这样看来,前面的N ...

  8. 修改数据表部分字段方法封装-及-动态生成对象并动态添加属性

    代码: //这样写的话,输入的是表的行对象,返回的是数据字典,可以直接用到更新操作里,public static Object AlterDate(Object tabledataobj){List& ...

  9. vue脚手架的安装、生命周期、文件导入格式、局部组件和全局组件、动态添加属性和方法、插槽、传值

    -----------------------------------    DOS命令 进入dos:  win+r 切换盘符: d: 查看: dir 打开文件夹: cd 文件夹的名字 返回上一级目录 ...

  10. 如何给iOS 分类添加 属性

    2019独角兽企业重金招聘Python工程师标准>>> 比如我们封装了一个类,不想再动它了,但是我们又需要在那个类中增加一些方法,这时候我们就不必在那个类中做修改或者再定义一个它的子 ...

最新文章

  1. 使用OpenCV和Python计算图像的“彩色度”
  2. Oracle 正则表达式
  3. Oracle的使用和Oracle安装过程
  4. android内存池,两种常见的内存管理方法:堆和内存池
  5. 怎么才能转入大数据领域 ,成为一名合格的大数据分析师...
  6. JScript多语言语法加亮引擎显示(代码精简)
  7. thinkcmf 去掉index.php,​ThinkCMF5.0如何修改入口文件 解决方法
  8. 博客搬到CSDN了,以后就老实的呆在这儿吧~~
  9. 初探Git git基本用法
  10. websocket学习和群聊实现
  11. 用python操作mysql数据库(之批量插入数据)
  12. 6.切勿对STL容器的线程安全性有不切实际的依赖
  13. c++ 随机字符串_关于Python的随机数模块,你必须要掌握!
  14. js define函数_聊聊JS模块化发展历程
  15. COSCon'18 面向全宇宙招募志愿者啦!
  16. 【Modern OpenGL】纹理 Textures
  17. 人生是什么?——感悟1:勇于承担自己的选择才是真正的勇气
  18. css木马式自动轮播,基于jQuery实现自动轮播旋转木马特效_jquery
  19. RSA js 加密解密
  20. MXY-单点登陆系统

热门文章

  1. 防雷探测器在建筑物中的要求
  2. Xcode 自定义代码块及代码块迁移
  3. 在SourceForge中建立开源项目
  4. 结对第一次—原型设计
  5. 【【henuacm2016级暑期训练】动态规划专题 D】Writing Code
  6. 关键字 : this /self / parent
  7. First flight, Let's do it!
  8. Characteristics with cached values must be read-only
  9. SenchaEclipsePlugin-1.1.0的使用
  10. 基于VisualStudio11开发Windows8的Metro sample讲解(1)MessageBox