2011-06-26 57 views
0

我有一個的UIImage * loadedPoofSprite我初始化像這樣:如何在應用程序從背景恢復後不讓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]; 

從那裏我用我的poofImage和,直到我的應用程序從後臺重新開始一切似乎罰款。我得到一個崩潰,因爲loadedPoofSprite消失了。我想避免這種情況將保留loadedPoofSprite像這樣的方式:這工作

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

但我認爲這不是做正確的方式和我基本上應該在applicationWillEnterForeground再次加載loadedPoofSprite。我不明白爲什麼最好加載它兩次而不是保留它。處理上述問題的正確方法是什麼?

謝謝!

回答

3

你若想loadedPoofSprite一個保留的財產,並指定想:

self.loadedPoofSprite = [UIImage imageNamed:textureFileName]; 

然後一切都會好起來的。一個保留的屬性使用

@property (nonatomic,retain) UIImage *loadedPoofSprite; 

聲明,你需要生成使用

@synthesize loadedPoofSprite; 

然後在dealloc程序,添加self.loadedPoofSprite = nil;在需要時釋放圖像的getter/setter。

+0

這就是它。謝謝! – GrAnD

0

您沒有指定您對loadedPoofSprite/poofImage所做的操作。 問題可能與保留/釋放無關:例如,如果您將圖像作爲子視圖添加到另一個視圖(通過UIImageView),則圖像會自動保留在框架中,因此不應該要求保留它自己,並且可以防止在系統需要時將其卸載。

事實上,您的應用程序可能會在後臺運行時受到系統嘗試恢復內存的影響,以使其他應用程序運行;在這種情況下,您的視圖將被釋放,可能會被釋放,並且在簡歷前臺,您的應用程序將無法找到其視圖。因此失敗。

如果我的推理適用,您需要檢查您的UIViews是否在那裏,並準備根據需要重新加載/重新創建它們(如文檔didReceiveMemoryWarning/viewWillLoad/viewDidUnload所指定)。

相關問題