关于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文件的最上方来添加属性和方法,相当于私有属性和方法,只能本类调用