想到一个问题 swift中的autoreleasepool(自动释放池)有用么?
我们进行验证一下
首先我们写一个加载图片的方法,保证会真正用到真实的IMP内存
func loadBigData(string: String?) {
if let path = Bundle.main.path(forResource: "big", ofType: "png") {
for i in 1..<1000000 {
autoreleasepool { // 释放打开自动释放池在这里管理
let data = NSData.dataWithContentsOfMappedFile(path)
print("\(string)---\(i),\(data)")
}
}
}
}
然后我们在 viewDidLoad 中进行两次调用
self.loadBigData(string: "11")
self.loadBigData(string: "222222")
第一次 加上autoreleasepool
运行我们看到整个时间段内存是保持平稳运行的并未一直增加,表示autoreleasepool 闭包运行结束时系统及时进行了释放
第二次 注释掉autoreleasepool
运行我们看到整个时间段内存是一直暴涨到最后执行完loadBigData() 后内存才降下来,也就是执行一次当前主线程的runloop后系统才进行的自动释放
总结: swift和OC中autoreleasepool自动释放池是相同效果,为了降低内存使用在需要频繁大量的新建对象时还是需要使用autoreleasepool的,就例如对视频中每帧进行的处理