2014-01-13 3 views
6

가끔씩 나는 ivar을 선언하지만, 잠시 후에 더 이상 사용하지 않습니다. 내 코드에서 이런 종류의 병을 제거하고 싶지만 내 사용하지 않은 ivars를 표시하는 경고를 찾을 수 없습니다.Xcode에서 사용하지 않는 ivars를 찾는 방법

사용하지 않은 모든 ivars를 찾을 수있는 도구 또는 Xcode의 기능이 있습니까?

정적 분석기에 CLANG_ANALYZER_OBJC_UNUSED_IVARS이 (가)있는 것으로 보이지만 아무 것도하지 않는 것 같습니다. 결코 YES로 설정 CLANG_ANALYZER_OBJC_UNUSED_IVARS와 엑스 코드 5 분석기 (사용되지 않는 인스턴스 변수)를들이받은

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

경고를 생성합니다.

+1

ivar을 삭제 (또는 주석 처리)하고 컴파일하고 불만 사항이 있는지 확인하십시오. –

+0

그래도 효과가 있지만, 지루한 대형 프로젝트의 경우 코드를 수정하지 않고도 모든 클래스를 살펴볼 수있는 자동화 된 도구가 필요했습니다. – Skotch

+1

다른 옵션은 처음부터 많은 ivars를 추가하지 않는 것입니다. –

답변

4

, 그것은 분석기가 아닌 인스턴스 변수에 보이지 않는 것 같다 @interface에 선언 된 두@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 

버그를 제출하거나 패치를 제출하는 것이 좋습니다.

+0

분석기가 ivars를 보았다는 말은 @interface에서 선언되고 @private로 표시되어 있습니까? 두 번 혼동하지 말아라 .. –

+0

바로, @ 브라이언 첸, 네가 한 말. 'BOOL analyze = (declaredInInterface && markedPrivate); ' –

+1

'@ 인터페이스 '에 iVars를 두는 것이 이상한 패턴 인 것 같습니다. – Abizern

1

제품 메뉴의 Xcode에서 분석을 클릭하십시오 ... 사용하지 않은 변수가 표시됩니다. 이것은 또한 죽은 코드에 대해 알려줄 것입니다. the relevant Clang source code 및 빠른 검사의 몇 가지를 바탕으로

+1

분석에 확실히 인식이 더 필요합니다. – Jack

+0

나를 위해 작동하지 않습니다. 업데이트 된 문제 설명보기 – Skotch

1

정적 분석기 옵션은 헤더 파일에 ivar을 선언하는 경우에만 작동합니다.

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

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

당신이에서 인스턴스 변수를 유지하기 위해 현대 구문을 사용할 수 없습니다 같은 보이는 :

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

이 중 어느 것도 분석기 경고의 어떤 종류를 생성

이는 분석이 제대로 경고 생성 .m 파일을 사용하여 사용하지 않는 ivars를 확인하십시오.

관련 문제