0

これは奇妙なことですが、私は単純なものが欠けているだけだと思います。

ThemeというObjectiveCクラスがあります。テーマは、ファイルからゲームのすべてのアートをロードし、それらをNSMutableArrayに保存します。

アプリが起動すると、新しいテーマオブジェクトが再作成されます。ロードプロセスの一部は、次のようなことを行います。

UIImage *image = [self mergeImage: bg toImage: overlay];
[imageArray addObject: image];

次のコードを使用して、背景画像を取得し、その上にオーバーレイを配置して、新しいUIImageを作成します。

- (UIImage *)mergeImage:(UIImage *)image1 toImage:(UIImage *)image2 { 
UIGraphicsBeginImageContext(image1.size);  

[image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];  

[image2 drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)];  

UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();  
//[resultingImage retain];

UIGraphicsEndImageContext();  

return resultingImage;
} 

これはすべて、テーマのinit関数で発生します。これが問題です。[[Themealloc]init]をから呼び出すと

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

アプリは1秒後にクラッシュし、スタックなどがなくなります(メモリが台無しになり、後でもう一度使用するとクラッシュするようです)。

これが奇妙な部分です。新しくマージされた画像をimageArrayに追加しない場合、クラッシュすることはありません。画像はもうありませんが、クラッシュはありません。また、画像を配列に追加せずにmergeImage関数に保持するとクラッシュするため、この新しく作成された画像を保持すると問題が発生していると思われます。それでも奇妙なことに、[Theme init]とdidFinishLaunchingWithOptionsの外で、アプリの後半までmergeImageを呼び出さなければ、問題ありません。

なぜですか?アプリが最初に起動したときにこの画像を保持することの何が問題になっていますか?

4

1 に答える 1

0

以下のコードを試してください:

UIGraphicsBeginImageContext(drawImage.bounds.size); 
[drawImage.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext();
return viewImage

ありがとう..!

于 2012-04-18T06:41:57.973 に答える