私は同じUIImageViewをすべてアニメーション化する複数のボタンを持つiPhone用のアプリケーションを作成しています。それはシミュレータでうまく動作します(実際にはすべてのアプリのように)が、デバイスになるとアニメーションはうまく再生されますが、アプリが終了するボタンを繰り返し押すことで終了します。これまでは2つのボタンを実装しています。彼らが押されたときに起こることがここにあります。 アプリ起動時に44 MBのRAMを利用できます。次に、アニメーションを開始する2つのボタンのうちの最初のボタンを押すと、使用可能なメモリが31になり、32まで上昇し、次に2番目のボタンを押すとメモリは9に下がり、次に24に上昇し、次に不思議に10までゆっくりと減少します。最初のボタンを押すと利用可能なメモリが14MBに上昇し、これらのボタンを繰り返し押すと、アプリのメモリが4〜3MBに落ちて終了します。器具には漏れはありません。ここに私のコードは誰でも私の記憶の問題が潜んでいる場所を見つけることができます。 (私はまだ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
私はそれはそれを引き起こしてthatsのimageNamedだという考えを持っており、その2.2.1が明確にそれがSOにもメモリの警告後に、別のキャッシュだしません私の理解は、+ imageNamed:キャッシュがiPhone OS 3.0でメモリ警告を尊重しなければならないということです。チャンスが訪れたときにテストしてください。今私が3.0のファームウェアとSDKをダウンロードしたとしても、それがデバイス上でテストすることができないので、imageNamedのキャッシュをクリアしていたかどうかわかりません!私がiPhone SDKの新機能であることを心に留めておくとBTW。前もって感謝します。
----------------編集---------------- 私はちょうどアップルのiPhoneデベロッパープログラムに参加しました。 WOOOHOOO、3.0がキャッシュされたイメージを適切にリリースしたかどうか確認します。
-------------編集------------------ はい、キャッシュされたイメージを解放します。さらに明確にするために私の答えをチェックしてください。
解除コードが正しくないため、UIImageViewを解放しないという副作用があります。 – Jason