[解決済み] プロダクションコードでNSLog()を使ってはいけないというのは本当ですか?
質問
このサイトでも何度か言われたのですが、本当にそうなのか確認したいのです。
私は、NSLog 関数呼び出しを私のコード全体に散りばめることができ、Xcode/gcc が Release/Distribution ビルドの際にそれらの呼び出しを自動的に取り除いてくれると期待していました。
これは使わない方がいいのでしょうか?もしそうなら、経験豊富なObjective-Cプログラマーの間では、どのような代替手段が最も一般的なのでしょうか?
どのように解決するのですか?
プリプロセッサー・マクロは、確かにデバッグに最適です。NSLog()に問題はありませんが、より良い機能を持つ独自のロギング関数を定義するのは簡単です。これは私が使っているもので、ログ文の追跡を容易にするためにファイル名と行番号を含んでいます。
#define DEBUG_MODE
#ifdef DEBUG_MODE
#define DebugLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
#define DebugLog( s, ... )
#endif
私は、この文全体を独自のファイルではなく、プレフィックスヘッダに記述する方が簡単だと思いました。DebugLog を通常の Objective-C オブジェクトと対話させることで、より複雑なロギング システムを構築することができます。たとえば、独自のログファイル(またはデータベース)に書き込み、実行時に設定できる「優先度」引数を含むロギングクラスを作成し、リリースバージョンではデバッグメッセージを表示せず、エラーメッセージを表示するようにできます(これを実行すると DebugLog() や WarningLog() などのクラスを作成することができます)。
あ、あと覚えておいてほしいのは
#define DEBUG_MODE
は、アプリケーションのさまざまな場所で再利用することができます。例えば、私のアプリケーションでは、ライセンスキーのチェックを無効にして、ある日付より前のものしか実行できないようにするために使用しています。これにより、期間限定の完全な機能を持つベータ版を、最小限の労力で配布することができます。
関連
-
[解決済み] Cocoapodsの使用時にXcodeの警告を無視する
-
[解決済み] UIViewの下に影を描くには?
-
[解決済み】「推奨アイコンファイルがありません - バンドルには、ちょうど「120x120」ピクセル、.png 形式の iPhone / iPod Touch 用のアプリアイコンが含まれていません。
-
[解決済み] UINavigationControllerに右ボタンを追加する方法は?
-
[解決済み] UITextFieldのキーボードの種類をプログラムで変更する
-
[解決済み] NSLogで使用するための "toString() "に相当するObjective-Cは何ですか?
-
[解決済み] iPhoneでMonoTouchは禁止になったのか?[クローズド]
-
[解決済み] iphoneシミュレーターでキーボードを使うにはどうしたらいいですか?
-
[解決済み] Mac OS Xのスタティック・ライブラリ(.a)のターゲット・アーキテクチャはどのように決定するのですか?
-
[解決済み] UITextFieldの高さを設定するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] hw.machine」識別子の信頼性を確認する方法は?
-
[解決済み] メソッド名と行番号を出力し、NSLogを条件付きで無効にする方法は?
-
[解決済み】@try - Objective-Cのcatchブロック
-
[解決済み】DEBUG/RELEASEビルドでコードが実行されているかどうかを判断する方法は?
-
[解決済み] iPhone/iPadのディスクの空き容量を確認する方法を教えてください。
-
[解決済み] Objective-C 2.0でメソッドに非推奨のフラグを立てるにはどうすればよいですか?
-
[解決済み] UIImageViewのコーナー半径の設定がうまくいかない
-
[解決済み] カメラロールに画像を保存する方法を教えてください。
-
[解決済み] iPhone 5 CSSメディアクエリ
-
[解決済み] モバイルSafariで:active擬似クラスが機能しない