问题指针似乎是图像的数据提供程序。如果在释放图像之前插入此行:
CFRetain(CGImageGetDataProvider(image));
那么3点0分一切都好。但是,如果该应用程序运行在更高版本的操作系统上,数据提供者将被泄露。因此,您必须检查操作系统版本,或者忽略它(malloc会记录一条错误消息,但不会抛出异常或以任何方式中断应用程序)。我一直在使用以下宏:
#if TARGET_IPHONE_SIMULATOR
// 3.0 CFVersion 478.470000
// 3.1 CFVersion 478.520000
#define BugFixRetainImageDataProvider(img) \
if (kCFCoreFoundationVersionNumber == 478.47) { \
CGDataProviderRef dp = CGImageGetDataProvider(img); \
if (dp) CFRetain(dp); \
}
#else
#define BugFixRetainImageDataProvider(img)
#endif
因为我不能在设备上复制它(我没有运行3.0的设备),所以我只在模拟器上应用这个修复程序。