【问题标题】:UIImageView's startAnimating does remove itself when animation is finished?UIImageView 的 startAnimating 会在动画完成后自行移除吗?
【发布时间】:2011-10-06 02:57:57
【问题描述】:

使用 UIImageview 制作动画需要以下步骤

  1. 创建自动发布的 UIImageView
  2. 创建图像数组
  3. 将图像数组分配给 UIImageView 的 animationImages 属性
  4. 设置其他属性
  5. 将 UIImageView 作为子视图添加到视图中
  6. 开始动画

我担心内存泄漏。
只要 UIImageView 是自动释放的对象,imageView 会被释放吗?

【问题讨论】:

    标签: iphone animation uiimageview


    【解决方案1】:

    听起来您希望图像视图在动画完成后消失。事实上,它不会。它将仍然是一个子视图。我不确定动画完成后会是什么样子。

    这本身并不是内存泄漏,因为视图仍然有一个指向图像视图的指针,但是如果您一遍又一遍地重复上述操作,您的内存将越来越少。您需要在某个时候从其父视图中删除图像视图。

    您可以做的可能是使用[UIView animateWithDuration:animations:completion:] 创建动画。给它一个等于动画图像持续时间的持续时间。在动画块中什么都不做。在完成块中,从其父视图中删除图像视图。

    或者只是执行 performSelectorAfterDelay 来调用删除视图的东西。不确定是否会更好地保证与图像序列的动画同步。

    【讨论】:

      【解决方案2】:

      你可以试试这个: Memory leaks debugging

      希望对你有帮助^^

      【讨论】:

        【解决方案3】:

        您可以确定 UIImageView 只要是视图层次结构的一部分就不会被释放。

        另外,如果你在第 2 步分配了 NSArray,你应该在第 3 步之后释放它。其余的看起来不错。

        【讨论】:

          【解决方案4】:

          如果你只是想在动画完成后从superview中移除imageview,使用以下两行:

          [UIImageView setAnimationDelegate:self];

          [UIImageView setAnimationDidStopSelector:@selector(removeFromSuperview)];

          【讨论】:

            猜你喜欢
            • 2023-04-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-28
            • 2016-03-09
            • 2012-03-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多