0

文档CIFilter说该类不是线程安全的,并且“每个线程都必须创建自己的CIFilter对象”。我正在这样做,但我仍然经常遇到错误的访问崩溃。导致崩溃的示例代码:

- (CIImage *) outputCIImage {

  CIFilter *monochromeFilter =
  [CIFilter filterWithName:@"CIColorMonochrome" keysAndValues:
   kCIInputImageKey, self.inputCIImage,
   @"inputColor", [LSMonochromeFilter CIColorForFilterColor:self.color],
   @"inputIntensity",[NSNumber numberWithFloat:1.0], nil];

  return monochromeFilter.outputImage;
}

最多可从 10 个线程并行调用此代码。我无法弄清楚原因,因为看起来CIFilter线程之间的实例应该完全相互隔离。有任何想法吗?

4

1 回答 1

1

仅仅因为过滤器在每个线程中是独立的,并不意味着它们访问的资源在每个线程中都是独立的。似乎您需要在使用 CoreImage 周围放置一个互斥锁或其他类型的锁或同步。

于 2012-11-30T16:53:31.797 回答