我是初学者:)
我有一个应用程序,当按下按钮时,它会更改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;
}
}
答案 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)
您使用什么代码更改图片?确保您没有重新分配图像或图像视图。