2013-10-12 1 views
7

私のアプリにはNSLogがたくさんあります。その中には大量のデータを印刷するものがあります。つまり検索結果です。これは私のアプリのスピードに大きな違いをもたらしますか?NSLogはアプリを遅くしますか?

私はマクロに精通していません - 誰かがすべてのNSLogを有効/無効にするものを提案できますか?

+0

確かにNSLogはあなたのアプリを遅らせることができます。どのくらい深刻なのは明らかにマクロの使用量によります。ほとんどの人は、コンパイルフラグまたはランタイムスイッチのいずれかでオン/オフを切り替えることができるマクロのバリエーションを使用します。 –

答えて

14

はいNSLogは、同期性のためにアプリの速度が低下する可能性があります。生産は、それらを最小化しようとするために、あなたのアプリがある場合は、すべてのNSLog

#ifdef DEBUG 
#define NSLog(...) NSLog(__VA_ARGS__) 
#else 
#define NSLog(...) 
#endif 
+0

私の無知を許してください。そのコードをどこに置くのですか?デバッグの値はどこで設定しますか? NSLogを呼び出す各ファイルでそれを宣言する必要はありますか? – JoshDG

+1

@ JoshDGプロジェクトの 'Project Name-Prefix.pch'ファイルに配置することができます。 'DEBUG'定数は、デバッグ用にビルドするときにXCodeによって自動的に定義されます。 – pNre

+0

ああ、クール!ありがとう! – JoshDG

4

MY CURRENT PREFIX.PCH FILEからDLogのようなものを使用してください。リリースビルドのログは無効になります。 Thisは、リリースビルドにNSLogを保存しない理由の素晴らしい説明です。

1

を切り替えるには 。エラーまたは警告の可能性があるものだけを残しておきます。あなたがデバッグを助けるためにそれらを使用した場合は、それらを削除することをお勧めします。

0

はい!あまりにも多くのNSLOgsは間違いなくあなたのアプリを遅らせるでしょう。私は通常私の.PCHでこれを追加するベストプラクティスとして

(コンパイルヘッダファイルをプリ)

#ifdef DEBUG 
#define DebugLog(f, ...) NSLog(f, ## __VA_ARGS__) 
#else 
#define DebugLog(f, ...) 
#endif 

だけでデバッグターゲットのビルド設定であなたのプリプロセッサマクロでDEBUGを可能にしました。 NSLog()の代わりにDebugLogを使用します。

あなたのディストリビューション/リリースではDEBUGが定義されていません。だからあなたのアプリは分散アプリのログに何も印刷しません。

関連する問題