iOS 动态添加属性方法
写在前面:
动态增加属性也不是很肆意的增加,是需要代码进行写的。如果一个类没有那个属性,那么在编译阶段就会报错而导致无法进行。之所以还叫做动态添加大致上是因为可以不重写某个类,而进行相应的属性的添加吧!不扯那么多了。切入正题:
首先需要创建类别,用来写入相应的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 动态添加属性方法相关推荐
- iOS Category 添加属性实现原理 - 关联对象
iOS Category 添加属性实现原理 - 关联对象 RunTime为Category动态关联对象 使用RunTime给系统的类添加属性,首先需要了解对象与属性的关系.对象一开始初始化的时候其属性 ...
- 我的Python学习笔记(四):动态添加属性和方法
一.动态语言相关概念 1.1 动态语言 在运行时代码可以根据某些条件改变自身结构 可以在运行时引进新的函数.对象.甚至代码,可以删除已有的函数等其他结构上的变化 常见的动态语言:Object-C.C# ...
- js给对象动态添加属性的2种方法
js给对象动态添加属性的2种方法 需求: 要给每个课程添加一个判断鼠标是否hover 分析: 因为数据是动态渲染的,所以需要动态的给他添加一个flag标记,就得在数据渲染之前先拿到,然后再添加一个自己 ...
- 20170702-变量说明,静态方法,类方法区别,断点调试,fork,yield协程,进程,动态添加属性等。。...
概念: 并行:同时运行 并发:看似同时运行 json后任然中文的问题 import jsond = {"名字":"初恋这件小事"}new_d1 = json. ...
- Python面型对象--重载运算符与动态添加属性
魔术方法 在Python中以两个下划线开头的方法,__init__.__str__.__doc__.__new__等,被称为"魔术方法"(Magic methods).魔术方法在类 ...
- Java动态生成类以及动态添加属性 本篇文章来源于 Linux公社网站(www.linuxidc.c
2019独角兽企业重金招聘Python工程师标准>>> 有个技术实现需求:动态生成类,其中类中的属性来自参数对象中的全部属性以及来自参数对象propertities文件. 那么技术实 ...
- Runtime(动态添加属性)
2019独角兽企业重金招聘Python工程师标准>>> 下面通过一个实例展示一下Runtime(动态添加属性)的用法 下面对运行时添加属性用到的策略参数进行补充: 这样看来,前面的N ...
- 修改数据表部分字段方法封装-及-动态生成对象并动态添加属性
代码: //这样写的话,输入的是表的行对象,返回的是数据字典,可以直接用到更新操作里,public static Object AlterDate(Object tabledataobj){List& ...
- vue脚手架的安装、生命周期、文件导入格式、局部组件和全局组件、动态添加属性和方法、插槽、传值
----------------------------------- DOS命令 进入dos: win+r 切换盘符: d: 查看: dir 打开文件夹: cd 文件夹的名字 返回上一级目录 ...
- 如何给iOS 分类添加 属性
2019独角兽企业重金招聘Python工程师标准>>> 比如我们封装了一个类,不想再动它了,但是我们又需要在那个类中增加一些方法,这时候我们就不必在那个类中做修改或者再定义一个它的子 ...
最新文章
- 使用OpenCV和Python计算图像的“彩色度”
- Oracle 正则表达式
- Oracle的使用和Oracle安装过程
- android内存池,两种常见的内存管理方法:堆和内存池
- 怎么才能转入大数据领域 ,成为一名合格的大数据分析师...
- JScript多语言语法加亮引擎显示(代码精简)
- thinkcmf 去掉index.php,​ThinkCMF5.0如何修改入口文件 解决方法
- 博客搬到CSDN了,以后就老实的呆在这儿吧~~
- 初探Git git基本用法
- websocket学习和群聊实现
- 用python操作mysql数据库(之批量插入数据)
- 6.切勿对STL容器的线程安全性有不切实际的依赖
- c++ 随机字符串_关于Python的随机数模块,你必须要掌握!
- js define函数_聊聊JS模块化发展历程
- COSCon'18 面向全宇宙招募志愿者啦!
- 【Modern OpenGL】纹理 Textures
- 人生是什么?——感悟1:勇于承担自己的选择才是真正的勇气
- css木马式自动轮播,基于jQuery实现自动轮播旋转木马特效_jquery
- RSA js 加密解密
- MXY-单点登陆系统
热门文章
- 防雷探测器在建筑物中的要求
- Xcode 自定义代码块及代码块迁移
- 在SourceForge中建立开源项目
- 结对第一次—原型设计
- 【【henuacm2016级暑期训练】动态规划专题 D】Writing Code
- 关键字 : this /self / parent
- First flight, Let's do it!
- Characteristics with cached values must be read-only
- SenchaEclipsePlugin-1.1.0的使用
- 基于VisualStudio11开发Windows8的Metro sample讲解(1)MessageBox