2014-01-13 9 views
6

時々私は象牙を宣言しますが、しばらくしてからもう使用しません。コードからこのような厄介なものを取り除きたいのですが、使用していない象牙が私に表示されるという警告はありません。Xcodeで未使用の象牙を見つける方法

未使用の象牙すべてを見つけることができるXcodeの機能が組み込まれていますか?

静的アナライザーにはCLANG_ANALYZER_OBJC_UNUSED_IVARSがありますが、何もしないようです。 YESに設定CLANG_ANALYZER_OBJC_UNUSED_IVARS(未使用アイバーズ)とのXcode 5でアナライザーをruningて

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

は、警告を生成することはありません。

+1

ivarを削除(またはコメントアウト)してコンパイルし、苦情がないかどうかを確認します。 –

+0

これはうまくいくが、面倒な大規模なプロジェクトでは、コードを修正することなく、すべてのクラスを調べる自動化ツールを期待していた。 – Skotch

+1

もう一つの選択肢は、最初に多くのイヴァールを追加しないことです。 –

答えて

4

the relevant Clang source codeと簡単なテストのカップルに基づいて、アナライザは、両方のが@interface@privateをマークで宣言さではありませんアイバーズを見ていないようです。

私はバグを提出するか、パッチを提出することをお勧めします。

+0

アナライザーのみがイーバールを見ているのは、@interfaceで宣言されていて、@privateとマークされていますか?ダブル私を混乱させないでください.. –

+0

右、@ブライアン陳、あなたが言った。 'BOOL analyze =(declaredInInterface && markedPrivate); ' –

+1

' @interface'にiVarsを入れるのは、廃止されたパターンのようです。 – Abizern

1

[製品コード]の[分析]をクリックします。未使用の変数が表示されます。また、デッドコードについても説明します。

+1

分析は確かに意識が必要です – Jack

+0

それは私のために働いていません。更新された問題の説明を参照してください – Skotch

1

静的アナライザーオプションは、ヘッダーファイルにivarを宣言した場合にのみ機能します。

これは正しく警告アナライザを生成します。

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

これらのいずれもが、アナライザの警告の任意の並べ替えを生成します。

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

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

あなたがアイバーズを保つために近代的な構文を使用することはできませんのようなので、それが見えますあなたが未使用のイヴァールをチェックしたい場合は、.mファイル。

関連する問題