ios - 不确定是不是内存泄漏(ARC)

标签 ios objective-c memory memory-management memory-leaks

我正在编写自定义动画,我怀疑我有内存泄漏,但我不确定。每次我运行给定的动画时,内存都会增加一点,但不会减少。为了确定,我做了一个测试:

NSLog(@"%@", self.weakanim);

// The animation collection to run
HyAnimationCollection * collection = [[HyAnimationCollection alloc] init];

self.weakanim = collection;

首先它记录 nil 然后它总是记录一个地址。所以这里有两个指标:

  1. 内存从 9.7MB 开始,每运行 10 次动画就会增加 0.1MB。我测试了大约 12MB。现在,应该每次都释放内存,还是只是 ARC(比如 JVM 的垃圾收集器)只定期释放内存?也就是说,也许它不是泄漏,而是ARC还没有发布它,因为我没有达到一定数量。
  2. 我将 weakanim 声明为 weak 只是为了查看之前的动画集合是否正在发布,但同样的问题仍然出现:ARC 是否尚未发布 yet?

最佳答案

  1. ARC 不像 JVM 那样工作。最接近的是当它使用“自动释放池”时。在这种情况下,对象在运行循环结束之前不会关联。如果您可以看到动画正在运行,那么运行循环很可能正在运行,应该定期刷新池。

  2. 显示是否存在泄漏的更好方法是在 HyAnimationCollection 类的 dealloc 方法中放置一个断点。如果您的其余调查是正确的,我的猜测是它从未被调用过。您可能在那个代码中有一个保留周期。

关于ios - 不确定是不是内存泄漏(ARC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25608784/

相关文章:

memory - 显示数据结构使用了多少内存

Python ctypes : how to allocate output buffer for C function in callback

ios - 如何根据内容设置单元格的动态高度

ios - 横向/所有方向的 MPMoviePlayerViewController

ios - UITextField 键盘国际化?

iphone - 将图像分配给 UIImageView iPhone 时出现问题

ios - 构建项目时使用 Google Signin lib 的 Xcode 7 警告

ios - 根据项目在网格中的 x,y 位置从数据库中提取项目的最有效方法

objective-c - 合并两个数组 cocoa obj-c

android - 解释 Android 内存信息