OC运行时简单运用(2)
2016-03-04 14:20
232 查看
在开发过程中,如果经常会遇到想要给现有的类(闭源类)添加自己的方法或者属性,但是继承又会显得麻烦和臃肿,但是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 :属性对应的标志符号(唯一)
存取的过程如下:
(2)假设需要给UIAlerView添加一个回调的block
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下载链接
(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 :属性对应的标志符号(唯一)
存取的过程如下:
(2)假设需要给UIAlerView添加一个回调的block
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下载链接
相关文章推荐
- 解决xcode升级之后安装的插件失效
- 如何将Provisioning Profile安装到开发的Mac系统上
- fireDAC oracle
- 搞不清FastCgi与PHP-fpm之间是个什么样的关系
- Python 代码调试技巧 (转载自:IBM developerWorks 张颖)
- 什么是凸函数
- Netty的FastThreadLocal
- iOS开发UI调试利器Reveal简单使用
- 两种禁止USB autosuspend的方法
- 9款免费的跨浏览器测试工具
- php生成utf-8文件
- 深入学习AngularJS中数据的双向绑定机制
- Socket通信原理和实践
- java之android真机调试
- PM HIS
- system()函数
- 四、union-find算法
- MFC编写图形化的c++程序(基于对话框的图形界面程序)
- VB.Net矩阵求秩函数
- 如何通过link_to传递一个post请求