2013-04-24 3 views
2

Я написал код, как это,Очевидная утечка, но clang статический анализатор didnot обнаружить, Почему?

- (NSString*) caleSignParam:(NSMutableArray*)postData 
{ 
    NSMutableArray* keyArray = [[NSMutableArray alloc] initWithCapacity:50]; 

    ...... 
    NSArray* sortedKeys = [keyArray sortedArrayUsingComparator: 
         (NSComparator)^(NSString *obj1, NSString *obj2) { 
          return [obj1 compare:obj2 options:NSLiteralSearch]; 
         }]; 
    ...... 


    NSString* signStr = aString; 

    return signStr; 
} 

Я забыл выпустить keyArray, и с использованием не-ARC, но когда я нажимаю «Анализ» в меню Xcode, он didnot обнаружить утечку keyArray.

Если я прокомментирую строку «NSArray * sortedKeys = ...», она может обнаружить утечку keyArray.

Интересно, что не так со статическим анализатором.

Я очень ценю вашу помощь.

ответ

1

Важно понимать, что статический анализатор не всегда корректен, и он всегда неверен. Он может создавать ложные срабатывания и ложные негативы. Однако настройки по умолчанию делают так, что вероятность ложных положительных минимальна. В этом конкретном случае я бы предположил, что анализатор не имел достаточного количества данных, чтобы принять определенное решение о том, что происходит с keyArray

+0

thank u. Я знаю, что статический анализатор не может обнаруживать ошибки в некоторых случаях и иногда сообщает об ошибке, которая не является ошибкой. Я действительно хочу знать, почему он не может обнаружить такую ​​очевидную утечку. – dx2ztm76

Смежные вопросы