好比咱们封装了一个类,不想再动它了,可是咱们又须要在那个类中增长一些方法,这时候咱们就没必要在那个类中作修改或者再定义一个它的子类, 只须要添加一个(Category)便可。可是若是咱们想给他添加属性,这样作是确定不行的。就要用到下面的技术了。编程
iOS扩展属性:category能够扩展类的方法,可是不能扩张类的属性。若是要扩展类的属性,能够用associative,这个相对于category来讲用的比较少,并且他还用到运行时编程,必须使用<obj/runtime.h>,使用objc_getAssociatedObject,objc_setAssociatedObject以及objc_removeAssociatedObjects.这几个方法的生命以下:atom
示例代码以下:code
一、先建立一个person类ci
#import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic, copy) NSString *name; @end #import "Person.h" @implementation Person @end
二、新建一个分类,运用associative添加属性rem
#import "Person.h" @interface Person (addproty) @property(nonatomic, copy)NSString *addr; @end #import "Person+addproty.h" #import <objc/runtime.h> @implementation Person (addproty) static char strAddrKey = 'a'; - (NSString *)addr { return objc_getAssociatedObject(self, &strAddrKey); } - (void)setAddr:(NSString *)addr { objc_setAssociatedObject(self, &strAddrKey, addr, OBJC_ASSOCIATION_COPY_NONATOMIC); } @end