2013-09-12 5 views
0

Я использую детектор лица 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; 
    } 
    } 

} 

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

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

Sorted by overall bytes and still living

Detail of the category

The relevant code

ответ

0

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

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

} 
+0

Я занимаюсь функциями = nil; перед возвратом, но все еще получая использование памяти –

+0

oh Я вижу .... Из вашего кода это выглядит так, как будто это делалось только в инструкции else. Однако было бы лучше сделать это в конце if-statement, поскольку возврат не будет вызываться до тех пор, пока цикл цикла не будет выполняться. – sher