我看了互联网上的许多帖子,找不到满意的答案。他们都说,当我们创建太多临时对象时,自动释放池用于避免偷看内存。他们给出了这样的示例:
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
据我了解,当我们退出第一个循环时,应该立即释放第一个狗对象。然后,我们进入第二个循环,第二只狗将被初始化,依此类推。基本上,我们永远不会遇到所有临时对象都保留在内存中的情况,对吗?那么,自动释放池的意义何在?