这个问题是一个扩展到:
链接1: 出IOS表面的创建图像并保存
链路-2: 从iOS应用以截图-模拟显示记录器(在内部查询)
(参见链接-1)我有一个截屏在后台运行的代码。 但作为说明,它需要2秒的睡眠不间断地工作,否则OS暂停的应用程序。 我想通了,其原因可能是因为我没有明确释放IOSurface创建。
原因-使用链接http://pastie.org/pastes/3734430由Victor罗宁给出了捕获正常工作,即使没有睡眠。 我试着用CFRelease之后我每次都写入图像释放destSurf(目标表面,我已经创建),但不起作用。
关于何时,如何以及是否要释放创建IOSurface任何帮助,将是非常有用的。 谢谢。
更新
所以,这到底发生了什么。 (参考链接-1)
IOSurfaceRef destSurf = IOSurfaceCreate(dict);
IOSurfaceAcceleratorRef outAcc;
IOSurfaceAcceleratorCreate(NULL, 0, &outAcc);
CFDictionaryRef ed = (__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: nil];
IOSurfaceAcceleratorTransferSurface(outAcc, screenSurface, destSurf, ed, NULL);
IOSurfaceUnlock(screenSurface, kIOSurfaceLockReadOnly, &aseed);
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, IOSurfaceGetBaseAddress(destSurf), (width*height*4), NULL);
CGImageRef cgImage=CGImageCreate(width, height, 8, 8*4, IOSurfaceGetBytesPerRow(destSurf), CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Little, provider, NULL, YES, kCGRenderingIntentDefault);
UIImage *image = [UIImage imageWithCGImage: cgImage];
CGImageRelease(cgImage);
UIImageWriteToSavedPhotosAlbum(image, self, nil, nil);
CFRelease(destSurf);
- 到CFRelease呼叫发生和应用程序崩溃。 有没有保存的图像。 但是,如果你把在1-2秒的睡眠之前发布,它工作正常。
- 如果跳过调用UIImageWriteToSavePhotosAlbum(),一切工作正常和捕捉不用中断。
我仍然不上究竟是什么问题,如何解决这个问题清楚了。 任何帮助,高度赞赏。