我有一个应用程序,其中屏幕在后台线程中连续捕获。这是代码
- (UIImage *) captureScreen {
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
CGRect rect = [keyWindow bounds];
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[[keyWindow layer] renderInContext:context];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIDeviceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight) || (orientation==UIInterfaceOrientationPortraitUpsideDown)) {
img=[self rotatedImage:img];
}
return img;
}
它适用于捕获一次或两次。但过了一会儿,应用程序总是在同一行崩溃[[keyWindow layer] renderInContext:context];
并给出EXC_BAD_ACCESS (code=1, address=0x8)
消息。我到处搜索,没有任何用处。仅发现 renderInContext 在后台线程中工作时存在内存泄漏问题。但正如你所理解的那样,这并不能解决我的问题:)。所以有3个问题:-
这次崩溃(问题)的原因是什么?
我能用这个做什么?
有没有其他方法来捕获屏幕(除了Apple建议的方法,因为还使用了renderInContext)。没有渲染的东西......?