【发布时间】:2015-01-12 14:40:26
【问题描述】:
我正在尝试使用CAKeyframeAnimation 为UIImage 数组设置动画。理论上很简单。
文章底部的示例代码。
我的问题是动画完成后,我有一个无法摆脱的巨大泄漏。
初始化CAKeyframeAnimation的代码:
- (void)animateImages
{
CAKeyframeAnimation *keyframeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];
keyframeAnimation.values = self.imagesArray; // array with images
keyframeAnimation.repeatCount = 1.0f;
keyframeAnimation.duration = 5.0;
keyframeAnimation.removedOnCompletion = YES;
CALayer *layer = self.animationImageView.layer;
[layer addAnimation:keyframeAnimation
forKey:@"flingAnimation"];
}
在动画中添加代理和手动移除动画会导致相同的泄漏效果:
... // Code to change
keyframeAnimation.delegate = self;
// keyframeAnimation.removedOnCompletion = YES;
keyframeAnimation.removedOnCompletion = NO;
keyframeAnimation.fillMode = kCAFillModeForwards;
....
然后:
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
if (flag)
{
[self.animationImageView.layer removeAllAnimations];
[self.animationImageView.layer removeAnimationForKey:@"flingAnimation"]; // just in case
}
}
结果总是一个巨大的分配。内存堆栈的大小与图像的大小成正比:
【问题讨论】:
-
我运行仪器,没有泄漏,但分配很高。
-
你知道如何解决高分配吗?
-
改用
imageWithContentsOfFile。 -
动画完成后,只需将图像数组设置为 nil。
-
这不起作用。这是我尝试的第一件事
标签: ios objective-c xcode uiimage cakeyframeanimation