objective-c - 具有非线程安全 CIFilter 的多线程

标签 objective-c ios multithreading exc-bad-access

docs for 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 实例应该完全相互隔离。有什么想法吗?

最佳答案

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

关于objective-c - 具有非线程安全 CIFilter 的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13639709/

相关文章:

iphone - 列出日历年中的天数

ios - 如何创建启用 TouchId 的选项

java - 代码性能比较,线程与非线程

iphone - 将 libmms 与 Objective-C 结合使用

ios - 子类可以创建与父类不同的协议(protocol)吗?

iOS 7 backBarButtonItem 隐藏

java - JAVA 中的网络爬虫。 java.out.lang.outofmemory 无法创建 native 线程

ios - 在 UITableView 中设置复选标记

c# - 将不同的对象分配给 C# 中的一个对象

c# - 处理 ErrorDataReceived 时出现 NullReferenceException - 终止线程