2011-01-07 2 views
3

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

Clang static analyzer error

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

Вот разбивка ошибок, которые я теперь получаю с клетчатой ​​версии 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 

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

Yet another Clang analyzer error

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

+0

Я не думаю, что * GetAllNewOrModifiedCopy * соответствует соглашениям об именах ... – Eiko

+0

Я попробовал кучу разных имен методов, чтобы увидеть, удастся ли эта ошибка уйти (в том числе addedOrModifiedcopy, которая не имеет get или new в name), и он по-прежнему дает ту же ошибку в одном и том же месте. –

+1

Попробуйте 'CopyAllNewOrModified'. Возможно, чекер был ограничен только рассмотрением «copy» и «mutableCopy» в начале имени метода. –

ответ

4

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

Далее, даже с нижним регистром «get», метод не соответствует конвенции.

Процитирую документацию:

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

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

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

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

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

+0

Не используется «новый» в названии метода опасно? – Yuji

+0

Yup. Исправлена. Благодарю. Анализатор тоже пожаловался бы на это. – bbum

+0

Я взял один из своих классов и сменил имя метода на именование, аналогичное вашему предложению, и переключил всех вызывающих абонентов на ожидание объекта с автореализацией, а не на сохранение, и анализатор прекратил жаловаться. Проблема в том, что у меня много классов, использующих такой метод, который вызывается во многих местах, поэтому я беспокоюсь об изменении кода, который работает нормально. Кроме того, я не люблю оставлять много объектов автореферата, лежащих вокруг. –