iOS分类中通过runtime添加动态属性
2016-07-28 16:48
549 查看
这个的话并不是说 可以 在程序运行的时候 来几个 未知的东西 就添加什么 1 2 3 4 5的属性。而是可以在系统原有类的基础上 给那个类 集合实际的工程来添加你方便实用的东西。比如 一个 label 有 一个 backgroundcolor属性,我要给它添加一个 其他的 比如 文字 第一个字的color,那么就可以用这种技术了。
一下是从网上找的一个demo
首先定义一个类
定义分类
总结:在分类中@property不会生成_变量,也不会实现getter和setter方法,我们可以手动实现如下
但是这样是没什么意义的,而且分类中不允许定义变量,所以只能用runtime类
欢迎大家 评论来 讨论 我的第一段见解是否正确
一下是从网上找的一个demo
首先定义一个类
#import@interface Person : NSObject @property (assign, nonatomic) NSInteger age; -(void)run; @end #import "Person.h" @implementation Person -(void)run{ NSLog(@"%s",__func__); } @end
定义分类
#import "Person.h" @interface Person (PersonExtention) @property (copy, nonatomic) NSString *name; -(void)saySex; @end #import "Person+PersonExtention.h" #import <objc/runtime.h> @implementation Person (PersonExtention) //定义常量 必须是C语言字符串 static char *PersonNameKey = "PersonNameKey"; -(void)setName:(NSString *)name{ /* OBJC_ASSOCIATION_ASSIGN; //assign策略 OBJC_ASSOCIATION_COPY_NONATOMIC; //copy策略 OBJC_ASSOCIATION_RETAIN_NONATOMIC; // retain策略 OBJC_ASSOCIATION_RETAIN; OBJC_ASSOCIATION_COPY; */ /* * id object 给哪个对象的属性赋值 const void *key 属性对应的key id value 设置属性值为value objc_AssociationPolicy policy 使用的策略,是一个枚举值,和copy,retain,assign是一样的,手机开发一般都选择NONATOMIC objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy); */ objc_setAssociatedObject(self, PersonNameKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC); } -(NSString *)name{ return objc_getAssociatedObject(self, PersonNameKey); } -(void)saySex{ NSLog(@"%s----%@",__func__,self); } @end
总结:在分类中@property不会生成_变量,也不会实现getter和setter方法,我们可以手动实现如下
-(NSString *)name{ return @"name"; } -(void)setName:(NSString *)name{ }
但是这样是没什么意义的,而且分类中不允许定义变量,所以只能用runtime类
欢迎大家 评论来 讨论 我的第一段见解是否正确
相关文章推荐
- Notification与多线程
- iOS tabbar 自定义小红点 消息显示,定制边框、颜色、高宽
- iOS每日一记之———————————————集成云信的那些事
- 关于CAShapeLayer的一些实用案例和技巧
- ios 打印
- 当fixed遇到ios,页面滑动遮不住下面内容时
- 常用的iOS第三方资源汇总
- ionic切换页面
- Promise of iOS
- iOS 给TableView添加Footer或Header
- iOS 添加各种view
- 在iOS中使用ZXing库
- iOS 第三方框架 - CocoaPods的安装、使用、原理
- iOS 使用AFNetworking实现多张图片上传
- iOS开发富文本NSAttributedString属性
- iOS 开发 排序问题 (好友列表,按字母排序)
- iOS Block原理简析
- ios开发中怎么判断各类设备
- ios 事件穿透的原因和解决方法
- iOS开发调用手机中的打电话,短信,邮箱,地图等