Ich habe ein Skript, das ich im Terminal ausführe, das den Scan-Build-Code-Analyzer auf meinen iPhone-Anwendungen ausführt, um nach Problemen zu suchen. Ich habe gerade zufällig festgestellt, dass es mindestens einen Fall gibt, in dem es keinen IBOutlet-Ivar gibt, der nicht in der Dealloc-Methode freigesetzt wird.Analyse statischer IP-Codes aus Terminal schlägt fehlendes fehlendes ivar-release fehl
Hier ist der Inhalt des Befehls I aus dem Terminal laufen:
#!/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
ich aktualisierte auf die neueste Version von checker, so kann es nicht sein, dass es eine neuere Version von checker ist. Hier sind die relevanten Teile der H-Datei für meine Klasse:
@interface LoginWizardUsernameViewController : UIViewController <UITextFieldDelegate, GetUserExistsDidFinish> {
IBOutlet UITextField *username;
IBOutlet UIActivityIndicatorView *activityIndicatorView;
}
@property (nonatomic, retain) UITextField *username;
@property (nonatomic, retain) UIActivityIndicatorView *activityIndicatorView;
Und hier sind die relevanten Teile der .m-Datei:
// lots o' code omitted here
@implementation LoginWizardUsernameViewController
@synthesize username;
@synthesize activityIndicatorView;
- (void)dealloc
{
[super dealloc];
}
Wie Sie sehen können, gibt es keine Veröffentlichung von die beiden IBOutlet-Elemente, aber obwohl sie in der Eigenschaftendefinition als beibehalten aufgeführt sind, sieht Checker das aus irgendeinem Grund nicht. Das Seltsame ist, dass ich in die .m-Datei anderer Klassen gehen und eine Version in der Dealloc-Methode kommentieren kann, und scan-build benachrichtigt mich am Ende des Scans des Problems. Ich kann einfach nicht herausfinden, was an dieser besonderen Situation anders ist.
Update: Ich habe einen Fehlerbericht für dieses Problem eingereicht. http://llvm.org/bugs/show_bug.cgi?id=8838 –
Direkt am Geld, fügte ich ein NSString beibehaltenes Element in der Klasse als eine Eigenschaft, und es begann plötzlich beschweren sich über die fehlenden Releases auf der IBOutlets. Vielen Dank. –
Ehrfürchtig. Danke, dass Sie mich über die Ergebnisse informiert haben:) –