使用animateWithDuration保留循环可能性:

时间:2011-06-30 01:58:01

标签: objective-c objective-c-blocks

我可以使用animateWithDuration:animations:completion:进入阻止保留周期吗?如果是,那么请你给我一些例子吗?

此外,我在Apple doc中找不到completion:块被复制到堆中。我可以假设除非明确指定(比如在addObserverForName:object:queue:usingBlock:中),否则块不会被复制到堆中?

1 个答案:

答案 0 :(得分:1)

没有“复制到堆栈”的块这样的东西。所有块都从堆栈开始;复制将它们移动到堆中。块必须被复制,因为它在方法返回后被调用(除非你没有动画任何东西或指定零延迟;在这种情况下,似乎立即调用完成块)。

可能存在一个保留周期的情况:您有一个无限重复的动画,并且您弹出视图控制器,导致视图丢失其超级视图。在这种情况下,我希望取消动画而不是无限期地继续。这不难测试。

请注意,如果取消动画,如果您切换远离并返回标签,或者将VC推到顶部然后弹出它,它可能也会被取消。

我还尝试使用大持续时间/重复计数进行测试,以防UIKit特殊情况无限重复动画忽略完成块(但我不确定它能否做到这一点,因为我认为完成块如果通过设置其中一个动画属性来“中断”动画,则必须调用它。