给分类扩展属性
- 创建Person 这个类 并且为Person这个类增加分类
#import "Person.h"
@interface Person (Extension)
/**
* 名字
*/
@property (nonatomic, copy) NSString *testName;
@end
- 接下来创建一个Person对象并且开始使用这个属性
#import "ViewController.h"
#import "Person.h"
#import "Person+Extension.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Person *p = [[Person alloc]init];
p.testName = @"jack";
}
- 运行发现报错 ,由此可以推断分类中的属性 系统没有为你实现set 方法及get方法
解决办法 自己实现这个属性set 方法及get方法
#import "Person+Extension.h"
#import <objc/runtime.h>
static NSString *testNameKey = @"testNameKey";
static NSString *testAgeKey = @"testAgeKey";
@implementation Person (Extension)
@dynamic testName;
@dynamic testAge;
-(void)setTestName:(NSString *)testName
{
objc_setAssociatedObject(self, &testNameKey, testName, OBJC_ASSOCIATION_RETAIN);
}
-(NSString *)testName{
return objc_getAssociatedObject(self, &testNameKey);
}
-(void)setTestAge:(int)testAge{
objc_setAssociatedObject(self, &testAgeKey, @(testAge), OBJC_ASSOCIATION_RETAIN);
}
-(int)testAge{
return [objc_getAssociatedObject(self, &testAgeKey) intValue];
}
@end