2011-06-30 12 views
2

animateWithDuration:animations:completion:でブロック保持サイクルを実行できますか?はいの場合は、私にいくつかの例を教えていただけますか?animateWithDurationで保持可能性:

また、Appleのドキュメントでcompletion:ブロックがヒープにコピーされていることが見つかりませんでした。明示的に指定しない限り(例えば、addObserverForName:object:queue:usingBlock:のように)ブロックがヒープにコピーされないと仮定できますか?

答えて

1

"スタックにコピーされた"ブロックはありません。すべてのブロックはスタック上で開始します。コピーするとヒープに移動します。ブロックをコピーする必要があります(何もアニメートしない、またはゼロ遅延を指定しないと、完了ブロックが直ちに呼び出されるように見える場合を除きます)。

保持サイクルが発生する場合があります。無限に繰り返すアニメーションがあり、ビューコントローラーをポップして、ビューがスーパービューを失う原因となります。この場合、私は無期限に続けるのではなく、アニメーションがキャンセルされることを期待しています。これはテストするのが難しくありません。

アニメーションがキャンセルされた場合は、タブを離したり戻したり、一番上のVCを押してポップしたりすると、アニメーションもキャンセルされている可能性があります。

UIKitの特殊ケースの場合、アニメーションを無限に繰り返すことで完成ブロックを無視するようにしても、大量の/繰り返し回数を試してみることにします(ただし、完了するとは思えませんアニメーションがアニメーション化されたプロパティの1つを設定することによって "中断"された場合、ブロックを呼び出さなければなりません)。

+0

申し訳ありません、スタックはタイプミスでした。私は修正しました。 – Pablo

関連する問題