在尝试减少使用CIDetector
的人脸检测时的计算时间时,我尝试将单个检测器实例重用于多次人脸检测,如Apple所建议的那样:
此类可以维护许多可能影响性能的状态变量。因此,为了获得最佳性能,请重用CIDetector实例,而不要创建新实例。
一切正常,直到我开始处理数千张照片。现在,我不时得到一个随机异常EXC_BAD_ACCESS
。当我不重用检测器但每次实例化一个新的检测器时,都不会发生这种情况。
一些相关的代码片段:
@property (retain, nonatomic) CIDetector* faceDetector;
- (void)initialVals {
NSDictionary *opts_context = @{kCIContextUseSoftwareRenderer: @NO};
self.context = [CIContext contextWithOptions:opts_context];
NSDictionary *opts = @{ CIDetectorAccuracy: CIDetectorAccuracyHigh,
CIDetectorTracking: @YES,
CIDetectorMinFeatureSize: @0.15
};
self.faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:self.context options:opts];
}
我不确定,但是这个问题可能与CIDetector isn't releasing memory有关。
最佳答案
解决问题,至少部分通过在创建检测器时删除标志CIDetectorTracking: @YES
来解决。
它消除了崩溃,同时损害了功能。提交了正式的错误报告。
关于ios - 重用CIDetector时发生异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24109232/