由于 ARC 在 iOS 中出现,我们是否还需要使用 xcode 工具(Allocations 和 Leak)?

As ARC came into existance in iOS, do we stil need the requirement of using xcode instruments (Allocations and Leak)?

正如我从苹果文档中了解到的那样,在 iOS 中,ARC 将自动处理内存泄漏和内存管理。

但我的疑问是,我们是否还需要 Xcode 工具(Allocations and Leak)的作用来确保我们的应用程序是否发生了内存泄漏??

如果您知道解决方案,请分享。

是的,当然你需要使用仪器。

Swift uses Automatic Reference Counting (ARC) to track and manage your app’s memory usage. In most cases, this means that memory management “just works” in Swift, and you do not need to think about memory management yourself. ARC automatically frees up the memory used by class instances when those instances are no longer needed.

However, in a few cases ARC requires more information about the relationships between parts of your code in order to manage memory for you. This chapter describes those situations and shows how you enable ARC to manage all of your app’s memory.

你应该看看Automated Reference Counting

最常见的情况之一是当您在 class 实例之间有强引用循环时,因为编译器不知道何时释放那部分内存。还要查看 strongweak 引用的区别。

但正如 Apple 所说,“在大多数情况下”,你没有它应该没问题,但如果你的应用程序崩溃,可能是你有内存问题。

自动引用计数提供了一种新的、更简单的管理引用计数对象的方法。通过自动执行调用 retainrelease 的任务,它消除了由于程序员忘记调用内存管理函数而导致的大量 class 内存泄漏和无效引用。

但是,当您的对象图具有循环时,ARC 不会消除由代码设计中的逻辑错误引起的另一种 class 泄漏。 ARC 为您提供了通过添加弱引用来解决此问题的工具,但如果您操作不当,ARC 将无能为力。

此外,您可能会遇到 "lingering references",即使您的程序不再需要某个对象,它仍保留在内存中。这种内存泄漏甚至可能发生在垃圾收集环境中,例如 Java 和 C#。它们代表设计中的逻辑错误,在当前的编译器技术状态下无法通过聪明的编译器技巧来消除。

这就是Xcode记忆工具派上用场的时候了。你 运行 他们检查内存泄漏,确保你的代码没有循环和 "lingering references".