Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS应用程序因频繁将图像绘制到上下文而崩溃_Ios_Iphone_Crash_Core Graphics_Cgcontext - Fatal编程技术网

iOS应用程序因频繁将图像绘制到上下文而崩溃

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);

我的iOS应用程序崩溃,它使用CoreGraphics处理图像

过了一段时间,我想出了这段代码:

  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框架中,事情也是自动发布的,即有多少对象可以安全地返回到调用方法。好的,这是一个简单的解释,请学习更多关于自动释放池的内容。