2011-06-30 15 views
2

我可以使用animateWithDuration:animations:completion:進入塊保留週期嗎?如果是的話,那麼你能給我舉個例子嗎?使用animateWithDuration保留循環的可能性:

另外,我在Apple文檔中找不到completion:塊被複制到堆中。我可以假設,除非明確指定(如在addObserverForName:object:queue:usingBlock:)塊不會被複制到堆?

回答

1

有沒有這樣的事情作爲「複製到堆棧」的塊。所有塊從堆棧開始;複製將它們移動到堆中。塊必須被複制,因爲它是在你的方法返回後調用的(除非你不設置任何動畫或指定零延遲;在這種情況下,完成塊似乎立即被調用)。

有可能會出現保留週期的情況:您有無限重複的動畫,並彈出視圖控制器,導致視圖失去其超視圖。在這種情況下,我期望動畫被取消而不是無限期地持續下去。這不難測試。

請注意,如果動畫被取消,那麼如果您切換離開並返回到選項卡,或者將VC推到頂部然後彈出,它可能也會被取消。

我也會嘗試測試一個很長的持續時間/重複次數,以防UIKit特殊情況下無限重複的動畫忽略完成塊(但我不確定它能做到這一點,因爲我認爲完成如果動畫是通過設置其中一個動畫屬性來「中斷」的,則必須調用該塊)。

+0

對不起,棧是錯字,我糾正了。 – Pablo