美文网首页
ios系统NSObject对象的cache

ios系统NSObject对象的cache

作者: easy_luo | 来源:发表于2020-03-08 01:48 被阅读0次

    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只是新增了暗黑模式的支持。

    相关文章

      网友评论

          本文标题:ios系统NSObject对象的cache

          本文链接:https://www.haomeiwen.com/subject/nsckdhtx.html