【发布时间】:2013-03-16 03:54:36
【问题描述】:
我目前正在使用UIImageView 根据用户按下的按钮为一系列图像设置动画。我在NSArrays 中创建了大约 5 组不同的图像,例如:
-(void)initiateAnimations {
punchani = [NSArray arrayWithObjects:
[UIImage imageNamed:@"punch0001.png"],
[UIImage imageNamed:@"punch0002.png"],
[UIImage imageNamed:@"punch0003.png"],
[UIImage imageNamed:@"punch0004.png"],
[UIImage imageNamed:@"punch0005.png"],
[UIImage imageNamed:@"punch0006.png"],
[UIImage imageNamed:@"punch0007.png"],
[UIImage imageNamed:@"punch0008.png"],
[UIImage imageNamed:@"punch0009.png"],
[UIImage imageNamed:@"punch0010.png"],
[UIImage imageNamed:@"punch0011.png"],
[UIImage imageNamed:@"punch0012.png"],nil];
}
然后我使用标准动画代码将它们循环一次:
player.animationImages = punchani;
player.animationDuration = 0.50;
player.animationRepeatCount = 1;
[player startAnimating];
但是,当我将越来越多/不同的图像加载到 UIImageView 中时,我最终会得到一个内存警告的输出,如下所示:(用“appname”替换我的实际可执行文件)
2013-03-15 20:52:23.065 AppName[2080:907] Received memory warning.
我知道这可能会发生,但 ARC 禁止我释放这些数组。我该如何解决这个泄漏?谢谢
【问题讨论】:
-
请注意,当在 UIImageView 中使用时,每个图像都会完全展开到内存中。要计算每张图像所需的内存,请将宽度乘以高度乘以 4 (RGB+A)。
-
顺便说一下,您不需要像这样显式设置一个数组,因为您的图像命名良好,您可以使用
animatedImageNamed:duration:方法,我假设它是按需加载图像而不是一下子。
标签: iphone ios animation memory uiimageview