ios - 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 的意义何在?