iPhone应用程序在设备上崩溃但在Iphone上运行

时间:2010-10-08 23:32:49

标签: iphone objective-c

我是初学者:)

我有一个应用程序,当按下按钮时,它会更改UIImageView的图像,每个图像大约200 kb,当在模拟器中运行它运行正常时,我可以多次更改图像而没有任何问题。

在我的设备(ipod touch)上运行时,它加载正常,它缓慢地通过大约4个图像然后崩溃。当我使用Allocations性能工具运行它时,当总字节数达到约2.75兆时,它会崩溃。生活分配的数量大约是8000(这么高吗?)。

我的控制台读取此内容

Program received signal:  “0”.
Data Formatters temporarily unavailable, will re-try after a 'continue'. (Unknown error loading shared library "/Developer/usr/lib/libXcodeDebuggerSupport.dylib")

我也尝试使用“泄漏”性能工具,但没有发现任何泄漏。

我的.h文件加载图片和uimageview,如下所示:

@property(retain, nonatomic) IBOutlet UIImageView* myUIImageView;
@property(nonatomic, retain) UIImage *image;

另外,我发布这样的内容:

- (void)dealloc {
[super dealloc];
[myUIImageView release];
[image release];
}

我也加入了这个,但似乎没有任何区别:

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    [myUIImageView release];
    [image release];
    // Release any cached data, images, etc that aren't in use.
}

我不确定在这一点上还有什么可以尝试,任何调试技术建议都会受到赞赏,关于如何解决这类内存问题的任何指针都会非常有帮助, 谢谢!

另外,抱歉忘了添加图片更改代码:

- (IBAction)myButton {  

    static NSUInteger counter = 0;

    counter++;

    if (counter == 1) {
        myUIImageView.image = [UIImage imageNamed:@"image1.jpg"]; 
    }
    else  {
        myUIImageView.image = [UIImage imageNamed:@"image2.jpg"];
            counter = 0;
    }
}

2 个答案:

答案 0 :(得分:2)

您的图像更改代码看起来不错,但我建议您进行以下更改:

您应该在myUIImageView方法中将viewDidUnload设置为nil:

- (void)viewDidUnload {
    // release retained subviews of main view
    self.myUIImageView = nil;
}

didReceiveMemoryWarning中,您应该将图片设置为nil而不是发送版本:

self.image = nil;

[image release]didReceiveMemoryWarning中的dealloc可能会导致双重释放。

此外,请勿在{{1​​}}中发布myUIImageView

你实际上在使用didReceiveMemoryWarning ivar吗?看起来您正在将图像直接分配给image。有一个未使用的ivar显然不会引起问题,但我只是想知道为什么它会存在。

答案 1 :(得分:0)

您使用什么代码更改图片?确保您没有重新分配图像或图像视图。