Исключение при повторном использовании 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 при создании детектора.

Это исключает сбой при компрометации функциональности. Подал официальный отчет об ошибке.

Другие вопросы по тегам