Исключение при повторном использовании CIDetector
При попытке сократить время вычислений при обнаружении лиц, использующих 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 не освобождает память.
1 ответ
Проблема решена, хотя бы частично, сняв флаг CIDetectorTracking: @YES
при создании детектора.
Это исключает сбой при компрометации функциональности. Подал официальный отчет об ошибке.