RunTime
来源:互联网 发布:手机屏幕亮度调节软件 编辑:程序博客网 时间:2024/05/14 06:35
iOS分类中通过runtime添加动态属性
- 首先定义一个类
#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 (Extention)@property (copy, nonatomic) NSString *name;-(void)saySex;@end#import "Person+Extention.h"#import <objc/runtime.h>@implementation Person (Extention)//定义常量 必须是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类实现
0 0
- runtime
- Runtime
- Runtime
- Runtime
- runtime
- runtime
- Runtime
- runtime*****
- runtime
- runtime
- runtime
- runtime
- runtime
- Runtime
- runtime
- runtime
- runtime
- runtime
- UML-状态图、活动图和交互图
- 开发 Spring Redis 应用程序
- hibernate注解
- 集合类学习笔记
- 两个链表的第一个公共结点
- RunTime
- 菜鸟之路-09
- dubbo连接池爆满
- 关于UIview UIlabel Unbutton 的一些常用的属性方法(用以优化界面)
- 关于Intent用法的几点学习笔记
- Ubuntu下将XPS文件转换成PDF文件
- C++语言基础内容
- hibernate配置文件hibernate.cfg.xml的详细解释
- hibernate二级缓存 Ehcache配置详解