美文网首页
iOS forin和enumerateObjectsUsingB

iOS forin和enumerateObjectsUsingB

作者: 山杨 | 来源:发表于2016-12-14 14:12 被阅读511次

    最近在做照片缓存, 突然发现了for in 和 enumerateObjectsUsingBlock的最大区别并不是速度问题, 而是这句话
    Values allocated within the block will be deallocated after the block is executed. Use retain to explicitly maintain those values.
    for in: 使用for in 不用说500张照片, 100张照片内存就炸掉了, 推测原因, 可能是因为for in 中用于遍历数组的方法,从开始到执行完毕才算一个完整的过程(换句话说就是从开始到执行完成才会释放内存). 所以在读取这么多照片的时候,内存一定在连续增长, 达到200M+ 就会因为内存警告⚠️而被终止. 现在随着手机不断发展, 拍摄的照片也是越来越接近单反的水平. 玩过单反的都知道, 一张照片的大小一般都在2M以上. 连续读取500张就是 1G的内存, iPhone的APP内存使用超过300就会直接被shutdown....扯远了;
    enumerateObjectsUsingBlock:: 在做大量照片缓存的时候, 遍历过程中, 内存几乎不会太大变化, 可以用内存检测工具查看. 推测原因, 可能是因为每一次遍历的过程都属于一个单独的block块, 每次遍历的过程都独立存在, 如果不做retain处理, block块中的临时变量都会被释放掉. 所以, 内存并不会连续增长.
    可见在项目中使用遍历数组的方法还是优先考虑enumerateObjectsUsingBlock:

    相关文章

      网友评论

          本文标题:iOS forin和enumerateObjectsUsingB

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