У меня есть приложение, в котором экран непрерывно захватывает фоновый поток. Вот кодobject c renderInContext crash on background thread
- (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). Что-то без рендеринга ...?
Вы должны выполнить свои задачи, связанные с графическим интерфейсом, в главной теме – nsgulliver
показать нам ваш код рендеринга. вы пытаетесь использовать основные объекты данных в потоке, на котором они не были созданы. вы используете неатомные свойства в вашем коде рендеринга. оба эти и более могут вызвать это. –
Является ли какой-либо из 'layer' или' context' nil при вызове 'renderInContext'? Вызывается метод 'receivedMemoryWarning'? –