【问题标题】:UIImageView's startAnimating does remove itself when animation is finished?UIImageView 的 startAnimating 会在动画完成后自行移除吗?
【发布时间】:2011-10-06 02:57:57
【问题描述】:
使用 UIImageview 制作动画需要以下步骤
- 创建自动发布的 UIImageView
- 创建图像数组
- 将图像数组分配给 UIImageView 的 animationImages 属性
- 设置其他属性
- 将 UIImageView 作为子视图添加到视图中
- 开始动画
我担心内存泄漏。
只要 UIImageView 是自动释放的对象,imageView 会被释放吗?
【问题讨论】:
标签:
iphone
animation
uiimageview
【解决方案1】:
听起来您希望图像视图在动画完成后消失。事实上,它不会。它将仍然是一个子视图。我不确定动画完成后会是什么样子。
这本身并不是内存泄漏,因为视图仍然有一个指向图像视图的指针,但是如果您一遍又一遍地重复上述操作,您的内存将越来越少。您需要在某个时候从其父视图中删除图像视图。
您可以做的可能是使用[UIView animateWithDuration:animations:completion:] 创建动画。给它一个等于动画图像持续时间的持续时间。在动画块中什么都不做。在完成块中,从其父视图中删除图像视图。
或者只是执行 performSelectorAfterDelay 来调用删除视图的东西。不确定是否会更好地保证与图像序列的动画同步。
【解决方案3】:
您可以确定 UIImageView 只要是视图层次结构的一部分就不会被释放。
另外,如果你在第 2 步分配了 NSArray,你应该在第 3 步之后释放它。其余的看起来不错。
【解决方案4】:
如果你只是想在动画完成后从superview中移除imageview,使用以下两行:
[UIImageView setAnimationDelegate:self];
[UIImageView setAnimationDidStopSelector:@selector(removeFromSuperview)];