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


person Xyand    schedule 08.06.2014    source источник


Ответы (1)


Проблема решена, хотя бы частично снятием флага CIDetectorTracking: @YES при создании детектора.

Это устраняет сбои, ставя под угрозу функциональность. Подал официальный отчет об ошибке.

person Xyand    schedule 09.06.2014