如何給iOS 分類添加 屬性

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