我正在编写自定义动画,我怀疑我有内存泄漏,但我不确定。每次我运行给定的动画时,内存都会增加一点,但不会减少。为了确定,我做了一个测试:
NSLog(@"%@", self.weakanim);
// The animation collection to run
HyAnimationCollection * collection = [[HyAnimationCollection alloc] init];
self.weakanim = collection;
首先它记录 nil
然后它总是记录一个地址。所以这里有两个指标:
- 内存从 9.7MB 开始,每运行 10 次动画就会增加 0.1MB。我测试了大约 12MB。现在,应该每次都释放内存,还是只是 ARC(比如 JVM 的垃圾收集器)只定期释放内存?也就是说,也许它不是泄漏,而是ARC还没有发布它,因为我没有达到一定数量。
- 我将
weakanim
声明为weak
只是为了查看之前的动画集合是否正在发布,但同样的问题仍然出现:ARC 是否尚未发布 yet?
最佳答案
ARC 不像 JVM 那样工作。最接近的是当它使用“自动释放池”时。在这种情况下,对象在运行循环结束之前不会关联。如果您可以看到动画正在运行,那么运行循环很可能正在运行,应该定期刷新池。
显示是否存在泄漏的更好方法是在
HyAnimationCollection
类的dealloc
方法中放置一个断点。如果您的其余调查是正确的,我的猜测是它从未被调用过。您可能在那个代码中有一个保留周期。
关于ios - 不确定是不是内存泄漏(ARC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25608784/