2014-01-13 20 views
6

Manchmal erkläre ich einen ivar aber nach einer Weile benutze ich ihn nicht mehr. Ich möchte diese Art von Crust aus meinem Code entfernen, aber ich kann keine Warnung finden, die mir meine unbenutzten Ivars zeigt.So finden Sie unbenutzte Ivars in Xcode

Gibt es ein Tool oder ein eingebautes Feature von Xcode, mit dem ich alle nicht verwendeten Ivars finden kann?

Ich sehe, dass der statische Analysator CLANG_ANALYZER_OBJC_UNUSED_IVARS hat, aber es scheint nichts zu tun.

@implementation AppDelegate 
{ 
@private 
    BOOL _foo; // Never read or written to 
} 

den Analysator in Xcode 5 mit CLANG_ANALYZER_OBJC_UNUSED_IVARS (unused ivars) auf JA gesetzt Runing erzeugt nie eine Warnung aus.

+1

Löschen (oder auskommentieren) Sie den ivar, kompilieren Sie und sehen Sie, ob es Beschwerden gibt. –

+0

Ja, das würde funktionieren, aber für ein großes Projekt, das langweilig ist, und ich habe auf ein automatisiertes Tool gehofft, das alle Klassen durchschaut, ohne dass ich Code ändern muss. – Skotch

+1

Die andere Möglichkeit ist es, nicht so viele Ivars an erster Stelle hinzuzufügen. –

Antwort

4

Basierend auf the relevant Clang source code und ein paar schnelle Tests, es scheint, dass der Analysator nicht auf ivars sieht, die nicht beide im @interfaceund erklärt sind markiert @private.

@interface Igloo : NSObject 
{ 
    NSString * address; // No warning 
    @private 
    NSInteger radius; // Warning 
} 
@end 

@implementation Igloo 
{ 
    NSInteger numWindows; // No warning 
    @private // Has no real effect, of course; just testing 
    NSString * doormatText; // No warning 
} 

@end 

Ich schlage vor, die Einreichung einer Bug/Patch einreichen.

+0

meinst du, Analysator nur anschauen? Ivars sind beide im @interface deklariert und mit @private gekennzeichnet? double nicht verwirrt mich .. –

+0

Richtig, @BryanChen, was Sie gesagt haben. 'BOOL analysiert = (decludedInInterface && markedPrivate);' –

+1

Scheint seltsam, das Einfügen von iVars in die '@ interface' scheint ein veraltetes Muster zu sein. – Abizern

1

In Xcode aus dem Produktmenü klicken Sie auf analysieren ... Es zeigt Ihnen nicht verwendete Variablen. Dies wird Ihnen auch über den toten Code erzählen.

+1

Analyse benötigt definitiv mehr Bewusstsein – Jack

+0

Es funktioniert nicht für mich. Siehe aktuelles Problem Beschreibung – Skotch

1

Scheint, dass die statische Analyseoption nur funktioniert, wenn Sie das ivar in der Headerdatei deklarieren.

Dies erzeugt der Analysator richtig Warnung:

// AppDelegate.h 
@interface AppDelegate : NSObject <UIApplicationDelegate> 
{ 
    BOOL _foo; // never read or written 
} 
@end 

Keine von diesen jede Art von Analysator Warnung erzeugt:

// AppDelegate.m 
@interface AppDelegate() 
{ 
@private 
    BOOL _goo; // never read or written 
} 
@end 

@implementation AppDelegate 
{ 
@private 
    BOOL _hoo; // never read or written 
} 
@end 

So sieht es aus wie Sie nicht die moderne Syntax verwenden können ivars in die halten .m-Datei, wenn Sie nach nicht verwendeten Ivars suchen möchten.