iOS应用程序因频繁将图像绘制到上下文而崩溃
我的iOS应用程序崩溃,它使用CoreGraphics处理图像 过了一段时间,我想出了这段代码:iOS应用程序因频繁将图像绘制到上下文而崩溃,ios,iphone,crash,core-graphics,cgcontext,Ios,Iphone,Crash,Core Graphics,Cgcontext,我的iOS应用程序崩溃,它使用CoreGraphics处理图像 过了一段时间,我想出了这段代码: UIImage * image = info[UIImagePickerControllerOriginalImage]; // fromcamera for (int i = 0; ; ++i) { NSLog(@"----- Step %d ---------", i); UIGraphicsBeginImageContext(image.size);
UIImage * image = info[UIImagePickerControllerOriginalImage]; // fromcamera
for (int i = 0; ; ++i)
{
NSLog(@"----- Step %d ---------", i);
UIGraphicsBeginImageContext(image.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, CGRectMake(0, 0, image.size.width, image.size.height), image.CGImage);
UIImage * image1 = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
在我的iPhone 5上,它在第24个周期后崩溃(无法直接连接到设备-必须使用无法调试iOS 7的XCode 4.6)
有什么想法吗?至少在循环中添加一个@autoreleasepool,以释放临时变量:
for (int i = 0; ; ++i) {
@autoreleasepool {
NSLog(@"----- Step %d ---------", i);
UIGraphicsBeginImageContext(image.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, CGRectMake(0, 0, image.size.width, image.size.height), image.CGImage);
UIImage * image1 = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
}
此外,您还在循环的每个迭代中创建一个新的
image1
,但它没有被使用。您能附上崩溃报告吗?您可能内存不足,Zaph是对的。正如我之前所写的-现在无法使用XCode 4.6Trying@autorelease pool连接到iOS 7设备(我自己完成的;)。这段代码什么都不做,只是演示了崩溃,所以,是的,image1未使用。是的,自动释放池帮助。你能解释一下为什么会这样吗?我假设,使用ARC不应该导致此类问题——正如您所说,image1未使用,那么为什么我会耗尽内存?我的想法是,我分配内存的速度比释放内存的速度快。我说的对吗?ARC和Objective-C运行时使用自动释放池。放入池中的项目稍后会被回收,通常是在运行循环中。在一个不可能发生的紧密循环中。@autoreleasepool作用域更快地释放池中的项。即使在Apple框架中,事情也是自动发布的,即有多少对象可以安全地返回到调用方法。好的,这是一个简单的解释,请学习更多关于自动释放池的内容。