我在 UIView 动画块上遇到了一些奇怪的事情。
运行动画代码后,视图从未释放。在调用动画代码之前,我将视图属性设置为 nil。然后在完成块内,我将它从超级视图中删除,所以在淡出之后它就消失了。
但是从不调用该淡出和删除视图的 -dealloc 。然后我想也许完成块保留了视图并使用__weak
which 做了一个弱引用。动画完成后视图突然被正确释放。
但是在动画块本身中,我只是引用了视图并将其 alpha 设置为 0。没有__weak
引用,视图仍然可以正确释放。
结论: iOS 会在动画完成后清理动画块。但它不会清理完成块。意味着:您必须对完成块中的所有内容使用 __weak 引用,因为它会永远存在。
是否有一种神奇的方法可以触发完成块处理或清理,以便释放所有强引用?当然,我使用 ARC 顺便说一句。