这是一个奇怪的,但我想我只是错过了一些简单的东西。
我有一个名为 Theme 的 Objective C 类。主题从文件中加载我的游戏的所有艺术作品并将它们存储在 NSMutableArray 中。
当应用程序启动时,它会创建一个新的 Theme 对象。加载过程的一部分是这样的:
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;
}
所有这些都发生在 Theme 的 init 函数中。这就是问题所在,当我从 [[Theme alloc] init] 调用
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
该应用程序在一秒钟后崩溃,让我没有堆栈或任何东西(我认为它会破坏一些内存并在稍后再次使用它或其他东西时崩溃)。
这是奇怪的部分。如果我不将新合并的图像添加到 imageArray,它永远不会崩溃。我没有图像了,但没有崩溃。另外,如果我不将图像添加到数组中,而是将其保留在 mergeImage 函数中,它确实会崩溃,这让我认为保留这个新制作的图像会导致问题。更奇怪的是,如果我直到稍后在应用程序中调用 mergeImage,在 [Theme init] 和 didFinishLaunchingWithOptions 之外,没关系。
知道为什么吗?在应用首次启动时保留此图像有什么问题?