self.layer renderInContext:drawRect方法中的上下文在ipad中提供Bad Access但在模拟器中不提供

时间:2013-02-16 11:00:55

标签: iphone ios objective-c xcode

我正在使用应用程序并在其中进行视频录制。现在我做的是捕获图像然后创建视频代码如下

- (void) drawRect:(CGRect)rect {
    NSDate* start = [NSDate date];

    CGContextRef context = [self createBitmapContextOfSize:self.frame.size];
    NSLog(@"context value %@",context);

    [self.layer renderInContext:context];

    CGImageRef cgImage = CGBitmapContextCreateImage(context);
    UIImage* background = [UIImage imageWithCGImage: cgImage];
    CGImageRelease(cgImage);
    self.currentScreen = background;


    if (_recording) {
        float millisElapsed = [[NSDate date] timeIntervalSinceDate:startedAt] * 1000.0;
        [self writeVideoFrameAtTime:CMTimeMake((int)millisElapsed, 1000)];

    }

      float processingSeconds = [[NSDate date] timeIntervalSinceDate:start];
      delayRemaining = (1.0 / self.frameRate) - processingSeconds;


      [self performSelectorInBackground:@selector(setNeedsDisplay) withObject:nil];

}

现在的问题是该方法是递归调用的,当停止录制时,它会给我Exc_Bad_Access。

它在设备中的模拟器机器人崩溃中工作正常,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你不应该在drawRect:中这样做,覆盖drawRect:的唯一原因是做一些自定义绘图(你不是)。您也不应该在后台线程上调用setNeedsDisplay,这是一种只能从主线程调用的GUI方法。此外,还取决于您可能需要释放位图上下文对象的createBitmapContextOfSize:方法和环境。