iOS为类别添加属性的方法(RunTime)

一般认为Category不能添加变量,其实系统已经告诉我们是可以的.

这家伙已经给UIViewController添加了图中的几个属性,那么如何实现?

其实是使用@dynamic来动态添加的。 (即运行时Runtime)

代码:

1.创建Person类

#import

@interfacePerson :NSObject

@property(nonatomic,copy)NSString* name;

@end

2.创建Person的类别

#import"Person.h"

//添加额外两个属性

@interfacePerson (addProperty)

@property(nonatomic,assign)NSIntegerage;

@property(nonatomic,copy)NSString* stu;

@end

3.Person类别.m的实现

#import"Person+addProperty.h"

#import

@implementationPerson (addProperty)

staticcharnameKey ='n';

staticcharstuKey ='s';

//给age属性提供getter和setter方法

- (NSInteger)age{

return[objc_getAssociatedObject(self, &nameKey)integerValue];

}

- (void)setAge:(NSInteger)age {

NSString* s = [NSStringstringWithFormat:@"%ld",(long)age];

objc_setAssociatedObject(self, &nameKey,s,OBJC_ASSOCIATION_COPY_NONATOMIC);

}

//给stu属性提供getter和setter方法

- (NSString*)stu{

returnobjc_getAssociatedObject(self, &stuKey);

}

- (void)setStu:(NSString*)stu{

objc_setAssociatedObject(self, &stuKey, stu,OBJC_ASSOCIATION_COPY_NONATOMIC);

}

@end

4.用一下吧

#import"ViewController.h"

#import"Person+addProperty.h"

@interfaceViewController()

@end

@implementationViewController

- (void)viewDidLoad {

[superviewDidLoad];

Person* p = [[Personalloc]init];

p.name=@"原有属性";

p.stu=@"添加的属性";

p.age=17;

NSLog(@"%@ %@ %ld",p.name,p.stu,p.age);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • The Brain vs Deep Learning Part I: Computational Complexi...
    hzyido阅读 641评论 0 4
  • 往年的12月31号这一天,我和大多数人一样在感叹时间过得真快,又一年过去了,然后回顾过去的一年,居然发现什么也记不...
    秦长大阅读 548评论 2 8
  • 或许大家还不知道,中国究竟是什么法系社会,严格上来说,中国只是倾向于大陆法系,以成文法文为判断依据,但也结合了社会...
    扫地_阅读 3,634评论 13 8