首先,我是一个n00b。经过长时间的尝试和研究,我决定得到一些外部帮助。
我的项目:
我为孩子们写了一本书。在我分析了代码后,我摆脱了所有潜在的泄漏,但我仍然有一个Level = 1 + 2崩溃。通过测试我的应用程序,我发现我的动画可能是个问题,因为在翻阅书籍并观看大约30个动画后它会崩溃。
我忘了发布一些东西吗?
也许你看到我看不到的东西。
这是我的代码
- (void)addButton1 {
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
[button1 setFrame:CGRectMake(174, 100, 421, 250)];
[button1 setBackgroundImage:[UIImage imageNamed:@"button.png"]
forState:UIControlStateNormal];
[button1 addTarget:self action:@selector(buttonPressed1)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button1];
}
- (void)animieren1:(UIImageView *)image {
[self animationZustand1];
[UIView commitAnimations];
}
- (void)buttonPressed1 {
[self animieren1:self.animation1];
}
- (void)normalZustand2 {
[self.animation2 setImage:[UIImage imageNamed:@"muller3s.png"]];
}
- (void)initAnimation2 {
animation2 = [[UIImageView alloc] initWithFrame:
CGRectMake(173, 550, 422, 262)];
[self normalZustand2];
self.animation2.opaque = YES;
[self.view addSubview:self.animation2];
}
- (void)animationZustand2 {
NSArray *imageArray = [[NSArray alloc] initWithObjects:
[UIImage imageNamed:@"muller3s.png"],
[UIImage imageNamed:@"muller4s.png"],
nil];
self.animation2.animationImages = imageArray;
self.animation2.animationDuration = 2.1;
animation2.animationRepeatCount = 1;
[self.animation2 startAnimating];
[self normalZustand2];
[imageArray release];
NSString *path = [[NSBundle mainBundle] pathForResource:@"riesel" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL
fileURLWithPath:path] error:NULL];
theAudio.volume = 0.1;
self.audioPlayer3 = theAudio;
[theAudio play];
[theAudio release];
}
有什么想法吗? 如果有人能帮助我真的很酷! 在此先感谢Planky
答案 0 :(得分:1)
听起来你还不清楚'1级'崩溃是什么。级别是指内存警告 - 当您即将耗尽应用程序的内存分配时,您的应用程序会从系统接收通知。
您的应用应该通过清除不再使用的对象来响应这些通知 - 如果不这样做,您将收到更多警告,直到您的应用被系统终止,因为根本没有更多内存可供您使用
虽然可能导致内存警告泄漏,但这通常不是根本问题。在压倒性的数量的情况下,它们是由于尝试同时将太多原始资产加载到内存中而引起的。
您需要仔细研究您的代码和结构,找出应对此问题的最佳方法。也许您目前只是将所有30页书籍同时加载到内存中:您需要考虑在需要时加载资源。如果用户看不到资产,也许您可以将其从内存中删除并在需要时重新加载。
在图形丰富的应用程序中,要记住文件大小与图像在内存中占用的大小不相等也很重要。假设您有一个与iPad屏幕大小相同的PNG文件(1024x768)。当加载到内存中时,此图像将占用超过3兆字节的内存。所有iOS设备都受内存限制,比其他设备更多:在第一代iPad上,单个图像可能占用了总内存分配的5%(应用程序访问的确切数量会有所不同,取决于很多因素:因此为什么你当你接近极限时收到通知。
内存警告是更加“友好”的崩溃之一,因为iOS会尝试在发生之前警告您的应用。因此,在控制器中监听这些通知非常重要,并做出相应的响应。