obiektyw c renderInContext zawiesza się w wątku w tle
Mam aplikację, w której ekran ciągle przechwytuje w tle wątku. Oto kod
- (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;
}
Działa dobrze do przechwytywania raz lub dwa razy. Ale po chwili aplikacja zawiesza się zawsze w tej samej linii[[keyWindow layer] renderInContext:context];
i to dajeEXC_BAD_ACCESS (code=1, address=0x8)
wiadomość. Szukałem wszędzie i nic użytecznego. Znaleziono tylko, że renderInContext ma problem z wyciekiem pamięci, gdy działa w wątku w tle. Ale jak rozumiesz, to nie rozwiązuje mojego problemu :). Tak więc mam 3 pytania: -
Jaka jest przyczyna tej awarii (problemu)?
Co mogę z tym zrobić?
Czy istnieje inny sposób przechwytywania ekranu (poza tym, który sugeruje Apple, ponieważ używany jest także renderInContext). Coś bez renderowania ...?