首页 > 解决方案 > Autorelease pool的真正使用

问题描述

我在互联网上查看了很多帖子,但找不到让我满意的答案。他们都说 Autorelease pool 是用来避免我们创建太多临时对象时在内存中偷看的。他们举了这样的例子:

for _ in 1...5 {
  autoreleasepool {
    let dog = Dog() //Dog is just a simple class
  }
}

然后我做了一个简单的实验来更好地理解它:

class Dog {
  init() {
    print("Dog inited")
  }
  deinit {
    print("Dog deinited")
  }
}

//And then in main controller we call:
for _ in 1...5 {
  let _ = Dog()
}
print("End of loop")

这是输出:

Dog inited
Dog deinited
Dog inited
Dog deinited
Dog inited
Dog deinited
Dog inited
Dog deinited
Dog inited
Dog deinited
End of loop

据我了解,当我们退出第一个循环时,应该立即释放第一个 dog 对象。然后,我们进入第二个循环,第二只狗将被初始化,依此类推。基本上,我们永远不会遇到所有临时对象都保留在内存中的情况,对吧?那么,Autorelease pool 的意义何在?

标签: iosswiftnsautoreleasepool

解决方案


推荐阅读