У меня есть скрипт, который я запускаю в терминале, который запускает анализ кода сканирования-сборки в моих приложениях для iPhone, чтобы проверить наличие проблем.Я просто случайно заметил, что есть хотя бы один случай, когда он не находит ивара IBOutlet, который не был выпущен в методе dealloc.
Вот содержимое команды, которую я запускаю из Терминала:
#!/bin/sh
cd /Developer/svn/MyCompany/iPhone/MyApplication
scan-build -analyzer-check-dead-stores -analyzer-check-llvm-conventions -analyzer-check-objc-mem -analyzer-check-objc-methodsigs -analyzer-check-objc-missing-dealloc -analyzer-check-objc-unused-ivars -analyzer-check-security-syntactic --experimental-checks -k -V -o scan-reports xcodebuild -configuration Debug -sdk iphonesimulator4.2 clean build
Я обновился до самой последней версии программы проверки, поэтому не может быть и более новой версии программы проверки.Вот соответствующие части файла .h для моего класса:
@interface LoginWizardUsernameViewController : UIViewController <UITextFieldDelegate, GetUserExistsDidFinish> {
IBOutlet UITextField *username;
IBOutlet UIActivityIndicatorView *activityIndicatorView;
}
@property (nonatomic, retain) UITextField *username;
@property (nonatomic, retain) UIActivityIndicatorView *activityIndicatorView;
А вот соответствующие части файла .m:
// lots o' code omitted here
@implementation LoginWizardUsernameViewController
@synthesize username;
@synthesize activityIndicatorView;
- (void)dealloc
{
[super dealloc];
}
Как видите,нет выпуска двух элементов IBOutlet, но даже если они перечислены как сохраненные в определении свойства, средство проверки по какой-то причине этого не видит.Странно то, что я могу зайти в файл .m других классов и закомментировать выпуск в методе dealloc, и scan-build радостно предупреждает меня в конце сканирования проблемы.Я просто не могу понять, что отличается в этой конкретной ситуации.