好比咱們封裝了一個類,不想再動它了,可是咱們又須要在那個類中增長一些方法,這時候咱們就沒必要在那個類中作修改或者再定義一個它的子類, 只須要添加一個(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