iOS类范畴可以为我们不知道源码或已有的类添加方法,但是无法为类添加实例变量,为了实现添加变量的目的,我们使用关联引用为分类添加数据,如下我们有个person类,但是我们没有它的源码,只有.h文件如下:
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic,strong)NSString *name;
@end
我们需要为它添加一个变量email,因为我们需要在程序中也能使用它的email地址,那么实现如下:
#import "Person.h"
@interface Person (EmailAddress)
@property(nonatomic,readwrite,copy)NSString *emailAddress;
@end
#import "Person+EmailAddress.h"
#import <objc/runtime.h>
@implementation Person (EmailAddress)
static char emailAddressKey;
-(NSString *)emailAddress
{
return objc_getAssociatedObject(self, &emailAddressKey);
}
-(void)setEmailAddress:(NSString *)emailAddress
{
objc_setAssociatedObject(self, &emailAddressKey, emailAddress, OBJC_ASSOCIATION_COPY);
}
@end
测试:
Person *person = [[Person alloc] init];
person.name = @"hah";
person.emailAddress = @"www.baidu.com";
NSLog(@"name : %@ email : %@",person.name,person.emailAddress);
结果:
name : hah email : www.baidu.com
试试吧!