2011-06-14 3 views
3

저는 다양한 라이브러리의 프로젝트에서 많은 .a를 가지고 있으며 콘솔의 일부는 출력을 가진 콘솔입니다..a libs에서 NSLogs 비활성화하기

내 빌드에서 모든 NSLogs를 비활성화 할 수 있습니까?

어쨌든 최종 릴리스 빌드에 영향을 줍니까? 예를 들어

:

AD URL: http://ads.mp.mydas.mobi/getAd.php5?medialets=false&sdkapid=44300&auid=a83014b158258e5bda3ee3f3634eaa17b66d9fce&mmisdk=4.2.4-11.4.25.i&ua=iPhone%204.2.1&dv=4.2.1&dm=iPhone2,1&adtype=MMBannerAdTop&hswd=320&hsht=53&accelerometer=true&vendor=adwhirl&video=true&language=en&country=IE&cachedvideo=true 

이 콘솔에 출력을 얻을 수 있습니다. 그러나 'AD URL'텍스트를 프로젝트에서 검색하면 아무 것도 발견되지 않습니다. 어떻게 든 무시하도록 강제로 제거 할 수 있습니까?

+5

링크 된 라이브러리에서 로그 명령문을 사용 불가능하게하는 간단한 방법은 없습니다. 그것들은 이미 컴파일되어 있으며, Foundation의 NSLog 내보내기에 대해 이미 링크되어 있습니다. 어떻게 든 연결을 리다이렉션해야 할 것입니다. –

+1

이 라이브러리에는 디버그 용과 릴리스 용의 두 가지 버전이 있습니까? 그렇다면, 릴리스 버전을 사용하면 어쨌든 이상적인 세계에서'NSLog() s'를 제거해야합니다. –

+0

내 대답은 작동 했습니까? 나는 그것이 그 것처럼 체크 된 것을 본다. 설명에 대한 의견은 크게 감사 할 것입니다. – Moshe

답변

0

NSLog는 실제로 릴리스 빌드의 성능에 영향을줍니다. 전역 검색을 수행하고 모든 NSLog 문을 대체하는 것이 좋습니다. 그렇게하면 모든 로깅 문을 삭제하거나 적어도 주석으로 처리 할 수 ​​있습니다.

나중에 참조 할 수 있도록 NSLog를 래핑하는 자체 loggig 함수를 만들 수 있지만 정의 할 컴파일시 간 상수를 확인하십시오.

편집 :

그것은 카테고리와 그 NSLogs를 재정의 할 수 있습니다. (나는 그러나,의 범주를 만들 클래스 단서가 없다.)

+0

'NSLog'는 [function] (http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/doc/uid/)입니다. 20000055-BCIJAAIA), 클래스의 메서드가 아닙니다. 그렇게 할 수는 없습니다. 라이브러리가 이미 컴파일되어 있다면 quixoto가 말했듯이, 주위를 둘러 보는 것은 까다 롭습니다. –

+0

@JoshCaswell - 오, 음, 좋은 지적입니다. – Moshe

+0

@JoshCaswell - 고마워, 나는 질문으로 넘어 가서 OP 질문에 핑 소리를 들었다. – Moshe

0

간단한 (하지만 접근 방식의 깨끗한) 접근 방식은 모든 NSLog 문을 supress 할

#if defined(NO_LOGS) 
    #define NSLog(xyz) 
#endif 

같은 일부 #DEFINE를 선언하는 것입니다 NO_LOGS를 켜면

+0

그건 내 NSLogs하지만, 포함 된 라이브러리에서 NSLogs의 실제 문제에 대한 작동합니다. –

관련 문제