【问题标题】:Why and when do we need to use @autoreleasepool in ios projects [duplicate]为什么以及何时需要在 ios 项目中使用 @autoreleasepool [重复]
【发布时间】:2016-08-19 19:10:18
【问题描述】:

我已经阅读了很多关于 @autorelease pool 的博客,但我仍然不清楚目标 c 或 ios 开发中的这个 @autorelease pool 概念。

那么任何人都可以阐明这个概念。 如果有人可以为我提供一个示例以及何时需要使用@autorelease pool,那将对我非常有帮助。

如何使用@autorelease 池和不使用它来测量内存分配。

请说明这个话题可能是重复的。

【问题讨论】:

  • Here 它说明了为什么 ARC 需要 Autoreleasepool
  • 我认为它仅在存在标有 __autoreleasing (see this) 的对象时才有用。所以这些类型的对象只有在你的应用程序主自动释放池结束时才会被释放,但如果在短时间内创建了很多,你可能会耗尽内存,所以你可以战略性地放置自己的自动释放池这样自动释放的对象就不会堆积起来,给你一个内存不足的错误
  • 当我使用@autorelease 池和不使用它时,如何在实际示例中测量内存利用率
  • 将不得不考虑使用 xcode 分析工具,但 99% 的时间你不应该需要自己的自动释放池,ARC 通常可以很好地处理事情(除非你保留自动释放池无济于事的循环)
  • 感谢您的快速回复:)

标签: ios objective-c memory-management automatic-ref-counting nsautoreleasepool


【解决方案1】:

Release 和 Autorelease 是与内存管理相关的术语。每当您拥有一个对象时,您就有责任释放它。如果你没有正确释放它,Objective -C 将无法回收它以供其他对象使用,并且会出现内存泄漏。

拥有一个对象的不同方法是 alloc、new、retain 和 copy 每当你使用这个东西时,试着释放它,这样 Objective C 就会小心地炸掉那个对象。如果您不确定是否要释放该对象,请确保执行自动释放。

当你对一个对象进行自动释放时,该对象没有以正确的方式释放,它将被添加到主函数中的 Autoreleasepool 中。主函数中的 Autoreleasepool 会维护一堆要释放的对象,当调用“drain”方法时,它们会被一个一个释放,例如:[pool drain]。在每个事件循环结束时重复调用 Drain 方法。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多