swift中的autoreleasepool(自动释放池)有用么?

文章通过实验验证了Swift中的autoreleasepool在大量新建对象时有助于降低内存使用,特别是在像视频处理这类频繁操作中。它与Objective-C中的效果相似,能确保在autoreleasepool闭包结束时系统及时释放资源。
摘要由CSDN通过智能技术生成

想到一个问题 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的,就例如对视频中每帧进行的处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值