ios系统NSObject对象的cache

2020-03-08  本文已影响0人  easy_luo

1、iOS 13 对 一类型class 第一次初始化时间过长,约 300ms;如再次对这
一类class 初始化,用时就会在1~3ms之间,极快完成初始化。对数据初步分析, iOS 13 系统对class 类 创建的时候,除了分配初始化需要的内存,还会对对象的进行缓存,有可能是为了复用。也有可能是为了后面再次创建对象做准备,整段内存copy快速创建对象(对象本身、对象的属性、方法等)

系统环境:iOS 13.1,iOS 13.6
app中首次创建花费的时间约 300ms
2020-03-07 21:15:35:742 Spec[main] I VSProductGridItemView:68  Time:0.286460
app中非首次创建花费的时间约 1~3ms 间,对比首次相差200倍左右
2020-03-07 21:15:35:745 Spec[main] I VSProductGridItemView:68  Time:0.001306
2020-03-07 21:15:35:749 Spec[main] I VSProductGridItemView:68  Time:0.001355
2020-03-07 21:15:35:752 Spec[main] I VSProductGridItemView:68  Time:0.001733
系统环境:iOS 11.1
app中首次创建花费的时间约 30ms
2020-03-07 22:31:20:931 Spec[main] I VSProductGridItemView:68  Time:0.030033
app中非首次创建花费的时间约 1~3ms 间,对比首次相差20倍左右
2020-03-07 22:31:20:936 Spec[main] I VSProductGridItemView:68  Time:0.001503
2020-03-07 22:31:20:943 Spec[main] I VSProductGridItemView:68  Time:0.001434
2020-03-07 22:31:20:945 Spec[main] I VSProductGridItemView:68  Time:0.001365
系统环境:iOS 10.3
app中首次创建花费的时间约 20ms
2020-03-08 04:25:58:341 Spec[main] I VSProductGridItemView:68 Time:0.018928
app中非首次创建花费的时间约 1~2ms 间,对比首次相差20倍左右
2020-03-08 04:25:58:347 Spec[main] I VSProductGridItemView:68 Time:0.001232
2020-03-08 04:25:58:350 Spec[main] I VSProductGridItemView:68 Time:0.001152
2020-03-08 04:25:58:353 Spec[main] I VSProductGridItemView:68 Time:0.001127
其他的数据对比 iOS 10.3
app中首次创建花费的时间约0.1ms
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000087
app中非首次创建花费的时间约 0.002ms, 对比首次相差20倍左右
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000004
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000002
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000002
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000006
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000002
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000002
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000004
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000003
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000002
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000002
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000001
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000002
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000002
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000002
2020-03-08 04:25:58:320 Spec[main] I VSProductItemViewModel:37 Time:0.000001

1、 由此可见,首次创建NSObject使用时比非首次的要多20倍或者200倍的时间。说明ios系统有做了一些优化,runtime开源代码在原理上分析也得到验证,NSObject第一次调用方法或者属性时首先去子类缓存散列表查找,再去父类缓存散列表查找,最后查到了才会缓存到散列表再将方法实现Method返回。
2、 唯一不明白的是ios 13系统需要200倍的时间,ios 13以下的系统只需要20倍的时间,另外iOS13的UIView只是新增了暗黑模式的支持。

上一篇下一篇

猜你喜欢

热点阅读