快把我逼疯了! animationImages始终显示内存泄漏

时间:2009-12-15 20:58:12

标签: iphone uiimage

我必须尝试过这个代码的十几个版本。并看了+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__);
}

5 个答案:

答案 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;