Статический анализатор Clang в приложении для iPhone показывает ошибки в последней версии - PullRequest
3 голосов
/ 08 января 2011

Когда я запускаю свой код через двоичный файл проверки версии 252, ошибок анализа не возникает.Однако, когда я переключаюсь на использование последней версии 253, она возвращает массу ошибок, которые не имеют никакого смысла.Например, вот изображение ошибки, которое отображается в моем браузере Safari после завершения сценария сканирования:

Clang static analyzer error

Это довольно распространенная ошибка, которая появляетсяв списке ошибок.Как видите, в конце имени метода есть Copy, но он по-прежнему сообщает о неправильном имени.

Вот разбивка ошибок, которые я сейчас получаю с версией проверки 253:

Bug Summary

Results in this analysis run are based on analyzer build checker-253.

Bug Type    Quantity
All Bugs    83  

Dead code   
Unreachable code    17  

Memory (Core Foundation/Objective-C)    
Bad release 19  
Leak of returned object 23  
Object sent -autorelease too many times 24

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

Yet another Clang analyzer error

Я предполагаю, что это могут быть некоторые ошибки, которые были введены в последней версии средства проверки, которые приводят к тому, что они отображаются как ошибки.Есть ли что-то еще (какая-то настройка сборки или проблема со сценарием сканирования-сборки), которую я мог бы упустить здесь?

1 Ответ

5 голосов
/ 08 января 2011

Во-первых, имена методов должны начинаться с строчных букв, а не с прописных (за исключением сокращений, таких как URL). Может случиться так, что статический анализатор отключается через верхний регистр «Get».

Далее, даже с использованием «get» в нижнем регистре, метод не следует соглашению.

Цитировать документацию:

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

Таким образом, анализатор правильно определяет проблему.

Я бы предложил следовать указаниям и использовать что-то вроде:

+ (NSArray *) modifiedOrNewPeople: (FMDatabase *) aDatabase;

Который освободит автоматически выпущенный массив. Если по какой-либо причине вы не можете вернуть автоматически выпущенный объект, пожалуйста, оставьте комментарий.

...