最近在做照片缓存, 突然发现了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和enumerateObjectsUsingBlock的最大不同
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...