OC运行时简单运用(2)
来源:互联网 发布:电力交易中心 知乎 编辑:程序博客网 时间:2024/06/02 21:35
在开发过程中,如果经常会遇到想要给现有的类(闭源类)添加自己的方法或者属性,但是继承又会显得麻烦和臃肿,但是category又不支持,这时候我们就可以利用运行时的特性来解决这一问题。
(1)假设我们要给UIButton添加一个枚举值属性style,该属性控制button是否具有圆角。
1.首先我们为button创建一个category,取名为style,声明枚举类型属性style,然后发现如下警告:
这也就我们通常情况下所说的不能直接通过category为已有类添加属性,category也不会生成对应的_style和方法;
2.手动实现setter和getter方法;
3.通过runtime.h 中的
void objc_setAssociatedObject(id object,const void *key, id value, objc_AssociationPolicy policy)
实现属性和类对象的绑定,其中参数的意义如下:
id object:需要绑定属性的类对象
const void *key: 该属性对应的唯一标志字符串,可以师C语言的字常量符串类型,也可是OC中的字符串对象类型。
id value:该属性对应的值
objc_AssociationPolicy policy:关联类型(涉及内存管理,跟内存管理的语义特性相似),点击查看具体的意义
与存入方法对应的是取出的方法
id objc_getAssociatedObject(id object,const void *key)
id object:被绑定属性的对象
const void *key :属性对应的标志符号(唯一)
存取的过程如下:
1.创建UIAlertView的category,取名为Block,声明方法
- (void)showAlertViewWithCompleteBlock:(AlertViewCompleteBlock)block:
2.通过void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicypolicy) 和id objc_getAssociatedObject(id object, const void *key)结合使用实现方法:
为已有类增加属性和方法主要是通过void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicypolicy) 和id objc_getAssociatedObject(id object, const void *key)两个方法结合来实现值传递过程中的存储操作。
demo下载链接
- OC运行时简单运用(2)
- OC运行时简单运用(1)
- OC运行时简单运用(3.1)
- OC-NSInvocation的简单运用
- 运行时简单运用(3.2)
- OC 运行时
- OC 运行时系统
- OC 运行时 (一)
- OC 运行时 (二)
- OC 运行时 (三)
- OC运行时简介
- OC运行时交互
- OC运行时消息
- 运行时runtime 知识运用
- OC运行时编程指南
- OC运行时编程指南
- OC运行时编程指南
- OC中的runtime运行时
- iOS后台运行模式(background execution mode)
- 造成数据库表死锁的原因分析及解决方案
- 解决xcode升级之后安装的插件失效
- Linux创建文件【命令】
- spring-boot项目 war包发布
- OC运行时简单运用(2)
- VB.Net矩阵求特征值
- 程序动态分析工具调研
- 如何将Provisioning Profile安装到开发的Mac系统上
- socket 堵塞非堵塞那些事
- vc debug 和release 下 ReadFile 问题
- 让你的程序“飞”起来——性能优化
- poj 3276Face The Right Way—反转(开关问题)
- 【转】Linux内核同步机制