我正在为iPhone创建一个应用程序,其中涉及具有多个动画相同的UIImageView的所有动画的按钮。它在模拟器中运行良好(几乎所有的应用程序都可以),但是当它涉及到设备时,它会很好地播放动画,但通过重复按下按钮,应用程序就会退出。到目前为止,我实现了2个按钮。这是按下按钮时发生的情况。 好吧,当我的应用程序启动时,我有44 MB的ram可用,然后当我按下开始动画的2个按钮中的第一个时,可用内存下降到31,然后爬到32,然后当我按下第二个按钮时记忆下降到9,然后爬到24,然后奇怪地下降到10。如果按下第一个按钮,则可用内存将攀升至14MB。在重复按下这些按钮时,应用程序内存将降至4至3 MB并退出。仪器中没有泄漏。这里是我的代码,任何人都可以发现我的记忆问题潜伏在哪里。 (顺便说一句,我仍在2.2.1上开发,因为如果我升级到3.0,我将无法在设备上测试我的应用程序,因为我没有注册苹果开发人员计划,并且我遵循在线教程获取应用到,只有与2.2.1工程设备)iPhone SDK:3.0是否清除imageNamed的缓存?因为2.2.1不行!
@synthesize 123pig;
- (IBAction)startClick:(id)sender{
animationTimer = [NSTimer scheduledTimerWithTimeInterval:(1.00/30.00) target:self selector:@selector(tick) userInfo:nil repeats:NO];
123pig.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed: @"123pigapple0001.png"],
[UIImage imageNamed: @"123pigapple0002.png"],
[UIImage imageNamed: @"123pigapple0003.png"],
[UIImage imageNamed: @"123pigapple0004.png"],
[UIImage imageNamed: @"123pigapple0005.png"],
[UIImage imageNamed: @"123pigapple0006.png"],
[UIImage imageNamed: @"123pigapple0007.png"],
[UIImage imageNamed: @"123pigapple0008.png"],
[UIImage imageNamed: @"123pigapple0009.png"],
[UIImage imageNamed: @"123pigapple0010.png"],
[UIImage imageNamed: @"123pigapple0011.png"],
[UIImage imageNamed: @"123pigapple0013.png"],
[UIImage imageNamed: @"123pigapple0014.png"],
[UIImage imageNamed: @"123pigapple0015.png"],
[UIImage imageNamed: @"123pigapple0016.png"],
[UIImage imageNamed: @"123pigapple0017.png"],
[UIImage imageNamed: @"123pigapple0018.png"],
[UIImage imageNamed: @"123pigapple0019.png"],
[UIImage imageNamed: @"123pigapple0020.png"],nil];
[123pig setAnimationRepeatCount:1];
123pig.animationDuration =.7;
[123pig startAnimating];
}
- (void)tick{
[self animatePig];
}
- (void)animatePig{
UIImage *pigImage13=[UIImage imageNamed:@"123pigapple0020.png"];
if(123pig.image == pigImage13)
123pig.image = pigImage13;
else
123pig.image = pigImage13;
}
- (IBAction)startClick1:(id)sender{
animationTimer1 = [NSTimer scheduledTimerWithTimeInterval:(1.00/30.00) target:self selector:@selector(tick1) userInfo:nil repeats:NO];
123pig.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed: @"123pig0015.png"],
[UIImage imageNamed: @"123pig0016.png"],
[UIImage imageNamed: @"123pig0017.png"],
[UIImage imageNamed: @"123pig0018.png"],
[UIImage imageNamed: @"123pig0019.png"],
[UIImage imageNamed: @"123pig0020.png"],
[UIImage imageNamed: @"123pig0021.png"],
[UIImage imageNamed: @"123pig0022.png"],
[UIImage imageNamed: @"123pig0023.png"],
[UIImage imageNamed: @"123pig0024.png"],
[UIImage imageNamed: @"123pig0025.png"],
[UIImage imageNamed: @"123pig0026.png"],
[UIImage imageNamed: @"123pig0027.png"],
[UIImage imageNamed: @"123pig0028.png"],
[UIImage imageNamed: @"123pig0029.png"],
[UIImage imageNamed: @"123pig0030.png"],
[UIImage imageNamed: @"123pig0031.png"],
[UIImage imageNamed: @"123pig0032.png"],
[UIImage imageNamed: @"123pig0033.png"],
[UIImage imageNamed: @"123pig0034.png"],
[UIImage imageNamed: @"123pig0035.png"],
[UIImage imageNamed: @"123pig0036.png"],
[UIImage imageNamed: @"123pig0037.png"],
[UIImage imageNamed: @"123pig0038.png"],
[UIImage imageNamed: @"123pig0039.png"],
[UIImage imageNamed: @"123pig0040.png"],
[UIImage imageNamed: @"123pig0041.png"],
[UIImage imageNamed: @"123pig0042.png"],
[UIImage imageNamed: @"123pig0043.png"],
[UIImage imageNamed: @"123pig0044.png"],
[UIImage imageNamed: @"123pig0045.png"],
[UIImage imageNamed: @"123pig0046.png"],
[UIImage imageNamed: @"123pig0047.png"],
[UIImage imageNamed: @"123pig0048.png"],
nil];
[123pig setAnimationRepeatCount:1];
123pig.animationDuration =2.7;
[123pig startAnimating];
}
- (void)tick1{
[self animatePig1];
}
- (void) animatePig1{
UIImage *pigImage11=[UIImage imageNamed:@"123pig0048.png"];
if(123pig.image == pigImage11)
123pig.image = pigImage11;
else
123pig.image = pigImage11;
}
- (void)stopTimer
{
[animationTimer invalidate];
[animationTimer release];
[animationTimer1 invalidate];
[animationTimer1 release];
}
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];
123pig.center = location;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)dealloc {
[super dealloc];
[123pig release];
}
@end
我有一个想法,它的imageNamed这就是导致它和2.2.1不清晰甚至内存警告后的缓存,并在另一个SO问别人说:“我的理解是,+ imageNamed:cache应该尊重iPhone OS 3.0上的内存警告,如果发现情况并非如此,请在有机会时进行测试并报告错误。现在,即使我下载了3.0的固件和SDK,我也不知道它是否清除了imageNamed的缓存,因为我无法在设备上进行测试!顺便提一下,请记住我是iPhone sdk的新手。提前致谢。
----------------编辑---------------- 我刚刚被接纳进苹果iphone开发者计划。 WOOOHOOO,我会检查3.0是否正确释放缓存的图像。
-------------编辑------------------ 是的,它释放缓存的图像。请查看下面的答案以作进一步澄清。
您的取消分配代码不正确,可能有不释放UIImageView的副作用。 – Jason 2009-06-21 15:29:26