iOS-category

关于category一直都很迷惑,可能是因为用的少,,,

http://book.51cto.com/art/201105/262265.htm   介绍category的文章

SVPullToRefresh深入理解 有关于给category添加属性的介绍

category是一种扩展类的机制,可以给一个写好的类添加方法

 

例如

你想给一个button写一个方法,调用方法改变button背景色

这时候就可以使用category

 

创建一个category的方法:

创建出来的就是一个UIButton的类别,然后在类别中写需要添加的方法

.h文件

.m文件

 

 

如何在类别中添加属性

类别中是不能添加属性的,但是可以使用associative(关联)的方法,利用get/set方法来模拟一个属性,但它不是属性;正常的属性对应一个实例变量,在对象实例内部,而关联的属性其实实在其他地方占据了一块内存,当前实例能够通过get/set方法访问和修改它

Associative和Category同属于Runtime的运用,只是Category属于语法级别的封装,使用起来非常方便;而要使用Associative则必须手动调用一些相关方法,这些方法都可以在<objc/runtime.h>中找到。

所以,在添加属性的时候需要import <objc/runtime.h>框架

主要使用的是两个方法

设置属性

第一个参数是原始对象,第二个参数是关联对象的key,第三个参数是关联对象本身,第四个参数是关联的策略。

如果第三个参数是nil,则清空当前关联。

访问属性

第一个参数是原始对象,第二个参数是关联对象的key

例子

 

另一个扩展类的机制是extension

在.m文件的最上方来添加属性和方法,相当于私有属性和方法,只能本类调用

 

posted @ 2016-03-11 10:59  电蚊拍  阅读(201)  评论(0编辑  收藏  举报