我可以使用animateWithDuration:animations:completion:
进入阻止保留周期吗?如果是,那么请你给我一些例子吗?
此外,我在Apple doc中找不到completion:
块被复制到堆中。我可以假设除非明确指定(比如在addObserverForName:object:queue:usingBlock:
中),否则块不会被复制到堆中?
答案 0 :(得分:1)
没有“复制到堆栈”的块这样的东西。所有块都从堆栈开始;复制将它们移动到堆中。块必须被复制,因为它在方法返回后被调用(除非你没有动画任何东西或指定零延迟;在这种情况下,似乎立即调用完成块)。
可能存在一个保留周期的情况:您有一个无限重复的动画,并且您弹出视图控制器,导致视图丢失其超级视图。在这种情况下,我希望取消动画而不是无限期地继续。这不难测试。
请注意,如果取消动画,如果您切换远离并返回标签,或者将VC推到顶部然后弹出它,它可能也会被取消。
我还尝试使用大持续时间/重复计数进行测试,以防UIKit特殊情况无限重复动画忽略完成块(但我不确定它能否做到这一点,因为我认为完成块如果通过设置其中一个动画属性来“中断”动画,则必须调用它。