接收内存警告级别= 1,级别= 2然后崩溃

时间:2010-10-14 13:11:47

标签: iphone

我正在努力开发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];

}

我在哪里做错了?任何帮助?
          在此先感谢。

4 个答案:

答案 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:...

这个答案实际上与我所提出的问题无关,但我想,我有责任在这里提及我的解决方案。

再次感谢。