我正在努力开发TilesGame并且我在最后阶段。但我的项目开始出现意外行为。在随机时间显示内存警告级别= 1,级别= 2然后,
程序接收信号:“0”。
数据格式化程序暂时不可用,将在“继续”后重试。 (加载共享库的未知错误“/Developer/usr/lib/libXcodeDebuggerSupport.dylib”)
杀
退出
我不知道我在做错了什么。我有大量的ImageView,但它们被正确分配和发布。
IBOutlets有什么关系吗?我在My viewController的Dealloc方法中发布了它们。
在ViewController.h中
@property (nonatomic, retain) MyCustomButton *paveButton;
@property (nonatomic, retain) MyCustomButton *slackenButton;
@property (nonatomic, retain) MyCustomButton *tkeeperButton;
@property (nonatomic, retain) MyCustomButton *spontButton;
@property (nonatomic, retain) UIImageView *paveHammer;
@property (nonatomic, retain) UIImageView *slackenHammer;
@property (nonatomic, retain) UIImageView *tkeeperHammer;
@property (nonatomic, retain) UIImageView *spontHammer;
@property (nonatomic, retain) UIImageView *paveKnob;
在ViewController.m中 -
@synthesize paveButton;
@synthesize slackenButton;
@synthesize tkeeperButton;
@synthesize spontButton;
@synthesize paveHammer;
@synthesize slackenHammer;
@synthesize tkeeperHammer;
@synthesize spontHammer;
@synthesize paveKnob;
- (void)dealloc {
[super dealloc];
[paveButton release];
[slackenButton release];
[tkeeperButton release];
[spontButton release];
[paveHammer release];
[slackenHammer release];
[tkeeperHammer release];
[spontHammer release];
[paveKnob release];
}
我在哪里做错了?任何帮助?
在此先感谢。
答案 0 :(得分:2)
看起来你的应用程序被杀了,因为它使用了太多的内存(虽然我猜你已经知道了!)
释放dealloc方法中的内容并不意味着如果内存不足则会释放它们。
你需要释放任何这样的IBOutlets:
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
[self setPaveButton:nil];
}
当发生低内存警告时,会调用此方法。
只发布可以在viewDidLoad方法中重新创建的内容,以防重新加载视图。
答案 1 :(得分:0)
您使用的图像尺寸很大,这就是它导致错误“内存警告”的原因。尝试使用尺寸更小,分辨率更低的图像。
所有最佳。
答案 2 :(得分:0)
该应用正在尝试使用比可用内存更多的内存。使用仪器检查泄漏和分配。也许尝试更少的瓷砖或更小的瓷砖。
答案 3 :(得分:0)
感谢所有回答我问题的人并感谢你的建议。我已经修复了我的错误,我在我的代码中犯了一个愚蠢的错误,这给我带来了麻烦。
我有大量的ImageView,但它们已正确分配和发布。
实际上这不对。我有一个ImageAnimation,我这样做了 -
- (void) createBorderGlessEffect
{
borderImage.animationImages = [[NSArray alloc]initWithObjects:
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_1" ofType:@"png"]],
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_2" ofType:@"png"]],
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_3" ofType:@"png"]],
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_4" ofType:@"png"]],
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_5" ofType:@"png"]],
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_6" ofType:@"png"]],
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_7" ofType:@"png"]],
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_8" ofType:@"png"]],
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_9" ofType:@"png"]],
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_10" ofType:@"png"]],
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_11" ofType:@"png"]],
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_12" ofType:@"png"]],
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"BorderG_13" ofType:@"png"]],
nil];
[borderImage setAnimationDuration:0.6f];
[borderImage setAnimationRepeatCount:1];
[borderImage startAnimating];
}
在我的项目中重复调用此方法,并查看我的代码的粗体部分,我已经分配了13个从未发布过的NsArray。
我现在正在做这个 -
borderImage.animationImages = [NSArray arrayWithObjects:...
这个答案实际上与我所提出的问题无关,但我想,我有责任在这里提及我的解决方案。
再次感谢。