2011-06-26 9 views
0

私はそうのように初期化するUIImage * loadedPoofSpriteを持っている:私のアプリがバックグラウンドから再開まで私は私のpoofImage、すべてを使用しアプリがバックグラウンドから再開した後にUIImageが消えないようにする方法は? (iPadの)

NSMutableDictionary* loadedDictionary=[NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat:@"%@/%@",Main_Bundle_Path,poofConfigFileName]]; 
NSString *textureFileName = [[loadedDictionary objectForKey:@"metadata"] valueForKey:@"textureFileName"]; 
loadedPoofSprite = [UIImage imageNamed:textureFileName]; 

poofImage = [[UIImage imageNamed:textureFileName] CGImage]; 

そこからは罰金です。私は、loadPoofSpriteがなくなったためにクラッシュする。この作品

[loadedPoofSprite autorelease]; 
loadedPoofSprite = [[UIImage imageNamed:textureFileName] retain]; 

が、私はそれはそれを行うには正しい方法ではないことが示唆されたと私は基本的にapplicationWillEnterForegroundで再びloadedPoofSpriteをロードする必要があります:私はこれを回避する方法はとても似loadedPoofSpriteを保持するだろうと思いました。私はなぜそれを保持する代わりに2回ロードする方が良いのか分からない。上記に対処するための正しいアプローチは何でしょうか?

ありがとうございました!

答えて

3

あなたはloadedPoofSprite保有財産を作る、などを割り当てたい場合:すべての罰金となります

self.loadedPoofSprite = [UIImage imageNamed:textureFileName]; 

。保持特性は

@property (nonatomic,retain) UIImage *loadedPoofSprite; 

を使用して宣言し、あなたは次にdeallocルーチンで、必要なときに画像を解放するためにself.loadedPoofSprite = nil;を追加

@synthesize loadedPoofSprite; 

を使用してゲッター/セッターを生成する必要があります。

+0

これです。ありがとうございました! – GrAnD

0

loadedPoofSprite/poofImageで行うことを指定していません。 おそらく、問題は保持/解放に関連していない可能性があります。たとえば、画像を別のビュー(UIImageViewを介して)にサブビューとして追加すると、画像はフレームワークによって自動的に保持されるので、システムがそれを必要とするときにアンロードを防止する。

実際には、バックグラウンドでアプリケーションが実行されていると、別のアプリが動作するためにメモリを回復しようとするシステムの影響を受ける可能性があります。そのような場合、あなたのビューは解放され、おそらく割り当て解除され、フォアグラウンドに再開すると、あなたのアプリケーションはそのビューを見つけられません。したがって、失敗。

私の推論が当てはまる場合は、UIViewがあるかどうかを確認し、必要に応じて再ロード/再作成を準備する必要があります(ドキュメントdidReceiveMemoryWarning/viewWillLoad/viewDidUnloadで指定)。

関連する問題