Runtime常见使用
2024-10-08 20:23:35
一些语法
更改对象的类/获取对象的类
1 |
CustomClass *class1 = [[CustomClass alloc]init]; |
获取对象的类名
1 |
CustomClass *class = [[CustomClass alloc]init]; |
获取一个类的所有方法, 所有的get set方法都能得到 还有公有的和私有的方法也能得到
1 |
unsigned int count = 0; |
获取一个类的所有属性,私有成员变量也可以得到
1 |
unsigned int count = 0; |
常见的使用
对象归档解档时需要的编码操作,假设对象有多个成员变量
1 |
@property(nonatomic,assign)int age; |
归档处理
1 |
-(void)encodeWithCoder:(NSCoder *)aCoder |
解档处理
1 |
-(instancetype)initWithCoder:(NSCoder *)aDecoder |
给分类增加成员变量
1 |
@property(nonatomic,copy)NSString *name; |
字典转模型
供解析的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37NSDictionary *dict3 = @{
@"statuses" : @[
@{
@"text" : @"今天天气真不错!", @"user" : @{
@"name" : @"Rose",
@"icon" : @"nami.png"
}
}, @{
@"text" : @"明天去旅游了", @"user" : @{
@"name" : @"Jack",
@"icon" : @"lufy.png"
}
} ], @"ads" : @[
@{
@"image" : @"ad01.png",
@"url" : @"http://www.ad01.com"
},
@{
@"image" : @"ad02.png",
@"url" : @"http://www.ad02.com"
}
], @"totalNumber" : @"2014",
@"previousCursor" : @"13476589",
@"nextCursor" : @"13476599"
};为nsobject增加一个分类。传入一个字典参数。
- 获得全体成员变量 Ivar *ivarList = class_copyIvarList(self, &count);
- 获得每个成员变量的名称 NSString *name = [NSString stringWithUTF8String:ivar_getName(ivar)];
- 取出字典中该name名称的对应的value值,id value = Dict[key];判断value是什么类型
- 如果value是字典类型,需要得到该成员变量的类型NSString *type = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)];并将该类型转为class,
Class modelClass = NSClassFromString(type);再来递归调用。 如果value是数组,就需要了解该数组中装的到底是什么类型的变量,在分类中需要定义协议
1
2
3@protocol ModelDelegate <NSObject>
+(NSDictionary*)objectClassInArray;
@end并在成员变量包含数组的类中实现协议方法
1
2
3
4
5
6
7+ (NSDictionary *)objectClassInArray
{
return @{
@"statuses" : @"SugarStatues",
@"ads" : @"SugarADs",
};
}得到当前key对应的数组中变量的类型(得到的string要转化成class类型),遍历数组中的成员,将字典转为模型。
DEMO
最新文章
- 服务端跨域处理 Cors
- 图解call、apply、bind的异同及各种实战应用演示
- UVa 458 - The Decoder
- 【html/css】html/css命名规范
- 让linux中的程序崩溃时生成core文件
- MySQL 数据库发展历程及缺点
- Asp.net从文件夹中读取图片,随机背景图
- 1.MySQL的安装(linux Ubuntu环境下)
- java io 文件操作
- 10 - 删除vtkDataObject中的Update Extent方法 VTK 6.0 迁移
- No2_2.接口继承多态_Java学习笔记_继承
- jquery的选项卡事件
- boost xpressive 例子
- HDU 1434 幸福列车(优先队列)
- springboot 1.5.2 集成kafka 简单例子
- 通俗语言解释内外网IP与端口映射
- 网络1711-1712的C语言作业总结(2017-2018第一学期)
- windows下ruby中显示中文的3种方法
- l类与对象课后作业
- eclipse工作区(workspace)常用设置(preferences)
热门文章
- C语言笔记 16_标准库&;stdio&;stdlib&;string&;time
- 如何决定 Web 应用的线程池大小
- iOS 一个新方法:- (void)makeObjectsPerformSelector:(SEL)aSelector;
- Spring集成MyBatis配置文件
- 设计函数f(f(n))== -n
- maven隐含依赖
- Crowd Control
- PAT甲级——1025 PAT Ranking
- kubernets轻量 contain log 日志收集技巧
- spring cloud关于feign client的调用对象列表参数、设置header参数、多环境动态参数试配