真正使用自动释放池

时间:2018-11-22 10:52:36

标签: ios swift nsautoreleasepool

我看了互联网上的许多帖子,找不到满意的答案。他们都说,当我们创建太多临时对象时,自动释放池用于避免偷看内存。他们给出了这样的示例:

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

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

0 个答案:

没有答案