我必须尝试过这个代码的十几个版本。并看了+100答案。它应该如此简单。一个真正的基本动画,(这次使用IB)但总是显示内存泄漏。无论我把我的零点放在哪里,我的释放,尝试了无数组合。
//在加载视图后实现viewDidLoad进行额外设置,通常是从笔尖。
- (void)viewDidLoad {
NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);
myView.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"1.png"],
[UIImage imageNamed:@"2.png"],
[UIImage imageNamed:@"3.png"],
[UIImage imageNamed:@"4.png"],nil];
myView.animationDuration = 1.0;
myView.animationRepeatCount = 0;
[myView startAnimating];
[myView release];
myView = nil;
[myView.animationImages release];
NSLog(@">>> Leaving %s <<<", __PRETTY_FUNCTION__);
}
答案 0 :(得分:1)
这里有各种各样的问题。您没有拥有此处尝试发布的任何引用。你看到的实际泄漏是什么?模拟器还是设备?
首先清理这段代码,删除你的版本,将你的设置删除为nil。
答案 1 :(得分:0)
您的问题并未提供有关图像数组和myView的整体情况的详细信息。如果无法看到完整图片中的内容,我建议您尝试使用Build - &gt;清除所有目标然后构建 - &gt;在Xcode中构建和分析。这个Build and Analyze只是Snow Leopard版Xcode中的一个选项。它将分析潜在内存泄漏的代码,并可能帮助您指明正确的方向。它不会接受所有东西,但它确实有助于指出我在匆忙时往往会错过的一些事情。
否则,我建议您发布myView的分配位置和animationImages的属性声明。
答案 2 :(得分:0)
我不太确定我是对还是错。但我不认为myView.animationImages需要发布,因为它不是init,除非它是你的程序的其他部分的init,我认为这是非常不可能的。
那些对内存管理更有知识的人请验证。谢谢!
答案 3 :(得分:-1)
您是否尝试在[myView.animationImages release];
之前添加[myView release];
?发布myView
后,您再也无法访问myView.animationImages
,因为没有任何引用它。
答案 4 :(得分:-1)
添加
myView.animationImages = nil;
之前:
myView.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"1.png"],
[UIImage imageNamed:@"2.png"],
[UIImage imageNamed:@"3.png"],
[UIImage imageNamed:@"4.png"],nil];
因此,最终代码如下:
myView.animationImages = nil;
myView.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"1.png"],
[UIImage imageNamed:@"2.png"],
[UIImage imageNamed:@"3.png"],
[UIImage imageNamed:@"4.png"],nil];
myView.animationDuration = 1.0;
myView.animationRepeatCount = 0;
[myView startAnimating];
[myView release];
myView = nil;