Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 播放UIImageView动画一次并在播放后立即将其从内存中删除的最佳方式是什么?_Ios_Uiviewanimation - Fatal编程技术网

Ios 播放UIImageView动画一次并在播放后立即将其从内存中删除的最佳方式是什么?

Ios 播放UIImageView动画一次并在播放后立即将其从内存中删除的最佳方式是什么?,ios,uiviewanimation,Ios,Uiviewanimation,我很难从记忆中删除动画。最好的方法是什么 这是我的动画代码: -(IBAction)animationOneStart { NSMutableArray *images = [[NSMutableArray alloc] initWithCapacity:88]; for(int count = 1; count <= 88; count++) { NSString *fileName = [NSString stringWithFormat:@"testPic1_%03d.jpg"

我很难从记忆中删除动画。最好的方法是什么

这是我的动画代码:

-(IBAction)animationOneStart { 

NSMutableArray *images = [[NSMutableArray alloc] initWithCapacity:88];

for(int count = 1; count <= 88; count++)
{
NSString *fileName = [NSString stringWithFormat:@"testPic1_%03d.jpg", count];
UIImage  *frame    = [UIImage imageNamed:fileName];
[images addObject:frame];
}

loadingImageView.animationImages = images;

loadingImageView.animationDuration = 5;
loadingImageView.animationRepeatCount = 1; //Repeats indefinitely

[loadingImageView startAnimating];
[images release];

}
-(iAction)动画开始{
NSMutableArray*图像=[[NSMutableArray alloc]initWithCapacity:88];

对于(int count=1;count不再需要在Xcode 4.2下使用ARC释放它!今天更新:)

据我所知,没有回调来知道imageView的动画何时完成。这很不幸,因为这意味着要在imageView完成动画制作后删除动画,您需要反复检查imageView的
isAnimating
方法,直到它返回false。下面是一个示例我的意思是:

您可以在原始代码中执行类似的操作,添加以下行

[loadingImageView startAnimating];
[images release];

[self performSelector:@selector(checkIfAnimationIsFinished) withObject:nil afterDelay:4.5f];
然后创建一个方法

-(void)checkIfAnimationIsFinished {
    if (![loadingImageView isAnimating]) {
        [loadingImageView release];
    } else {
        [self performSelector:@selector(checkIfAnimationIsFinished) withObject:nil afterDelay:0.5f];
    }
}
这只是一个例子,我使用了值4.5f和0.5f,因为不幸的是,计时不精确,这更像是一个大概的数字。4.9f和0.1f可能会更好。不管怎样,问题是,如果在启动动画后将方法设置为激发5.0f秒,则无法100%确定动画是否会完成没有。因此,如果没有完成,您需要反复检查


无论如何,这不是最干净的解决方案,但除非其他人知道在imageView完成动画制作后如何获得回调,否则我不知道有更好的解决方案。

在您正在执行的同一位置:[images release];知道这一点很好..但我需要它在iOS 4中工作,不幸的是!它仍然需要。ARC只是在运行时添加方法,而不是手动实现。它与您仍然可以开发的每个iOS版本完全兼容,这只会让您的生活更轻松。如果您不相信我,请查看苹果的文档:"ARC的工作原理是在编译时添加代码,以确保对象的寿命与需要的一样长,但不再如此。从概念上讲,它遵循与手动引用计数相同的内存管理约定,为您添加适当的保留、释放和自动释放方法调用。Mac OS X v10.6和v10.7的Xcode 4.2支持ARC…和对于iOS 4和iOS 5。“通过哇,谢谢Dylan。这真的会自动从内存中删除图像吗?是的!我做过内存测试等,它比以前处理内存更好。这是一个不需要动脑筋的问题
-(void)checkIfAnimationIsFinished {
    if (![loadingImageView isAnimating]) {
        [loadingImageView release];
    } else {
        [self performSelector:@selector(checkIfAnimationIsFinished) withObject:nil afterDelay:0.5f];
    }
}