1

質問:以下のアニメーションが適用された UIView を含む ViewController の割り当てを解除すると、メモリ リークやリテイン サイクルが発生しますか?

つまり、このアニメーションを uiview に適用すると、uiview の親 VC が破棄または割り当て解除されたときに、メモリ リークまたは保持サイクルが発生しますか?

+(CAAnimation*)fadeOfRoomStatusLabel
{
    //Customize animation
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
    animation.FromValue = [NSNumber numberWithFloat:0.2f];
    animation.toValue = [NSNumber numberWithFloat:1.0f];
    animation.autoreverses = YES;
    //animation.BeginTime = CACurrentMediaTime()+.8;
    //animation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseOut];
    animation.removedOnCompletion = NO;
    animation.duration = 1;
    animation.repeatCount = 99;
    return animation; 
}
4

1 に答える 1

1

いいえ、アタッチされているビューへの参照を明示的に設定していないため、そうではありません。ただし、後でアニメーションのデリゲートを、アニメーションへの強い参照を持つオブジェクトに (直接的または間接的に) 設定すると、アニメーション インスタンスがそのデリゲートを保持するため、保持サイクルが発生します。デリゲートを解放するには、ある時点でデリゲートをクリアする必要があります。

これらをテストするのはとても簡単です。-deallocビュー コントローラのメソッドにデバッグ ログ メッセージを追加するだけです。-deallocビュー コントローラを閉じるときは、そのメソッドからのログ メッセージが表示されることを確認してください。そうでない場合は、View Controller のどこかにメモリの問題があることがわかり、その理由のデバッグを開始できます。

于 2013-10-24T05:37:17.400 に答える