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 に答える