Использование памяти детектора лица не освобождено

Я использую детектор лица iOS на всех возможных ориентациях изображения, как это

for (exif = 1; exif <= 8 ; exif++)
{
    @autoreleasepool {


    NSNumber *orientation = [NSNumber numberWithInt:exif];
    NSDictionary *imageOptions = [NSDictionary dictionaryWithObject:orientation forKey:CIDetectorImageOrientation];
    NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];

    glFlush();
    features = [self.detector featuresInImage:ciimage options:imageOptions];
    //features = [self.detector featuresInImage:ciimage];

    if (features.count > 0)
    {
        NSString *str = [NSString stringWithFormat:@"-I- found faces using exif %d",exif];
        [faceDetection log:str];
        NSTimeInterval duration = [NSDate timeIntervalSinceReferenceDate] - start;
        str = [NSString stringWithFormat:@"-I- facedetection total runtime is %f s",duration];
        [faceDetection log:str];
        self.exif=[[NSNumber alloc] initWithInt:exif];
        break;
    }
    else {
        features = nil;   
    }
    }

}

но в профилировщике кажется, что память растет с каждым разом:

Не уверен, если это правда, и если да, то как решить проблему

Сортировка по общему количеству байтов и все еще живой

Деталь категории

Соответствующий код

1 ответ

В вашем цикле большинство объектов имеют тип auto-release, основная проблема заключается в том, что вы присваиваете новое значение "функциям" в каждом цикле, и если выражение "if" истинно, вы не делаете его равным nil. Попробуйте сделать это:

if(features.count > 0)
{
  /// your existing code here
  features = nil;
  break;

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