7

最初のiPhoneアプリを提出しようとしています。

アプリケーションをテストおよびデバッグするために、多くのNSLogステートメントを配置しました。

だから私の質問は「NSLogステートメントをソースコードに残しても大丈夫ですか」です

そして、nslogステートメントが合計実行時間を遅くするかどうか疑問です。

ありがとう。

4

7 に答える 7

9

私はこれをいつも使っていました(どこかで見つけました):

// DLog is almost a drop-in replacement for NSLog to turn off logging for release build
// 
// add -DDEBUG to OTHER_CFLAGS in the build user defined settings
//
// Usage:
//
// DLog();
// DLog(@"here");
// DLog(@"value: %d", x);
// Unfortunately this doesn't work DLog(aStringVariable); you have to do this instead DLog(@"%@", aStringVariable);
//

#ifdef DEBUG
#   define DLog(__FORMAT__, ...) NSLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#   define DLog(...) do {} while (0)
#endif
// ALog always displays output regardless of the DEBUG setting
#define ALog(__FORMAT__, ...) NSLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

Facebook の three20 プロジェクトには、デバッグまたはログ記録のより複雑な方法があります。

于 2010-02-05T19:06:04.297 に答える
6

私が以前取り組んでいたアプリには、コンソールにデバッグをダンプする多くの NSLogs がありました。iPhone 3G ではパフォーマンスが大幅に低下することがわかりました。パフォーマンスの低下は 3GS で顕著でしたが、それほどではありませんでした。

私のアドバイスは、プリプロセッサ マクロとデバッグ プリプロセッサ定義を使用して、リリース ビルドではなくデバッグ ビルドで条件付きで NSLogs を使用することです。

于 2010-02-05T17:03:51.930 に答える
3

AppStore にある 3 つのアプリには NSLogs が読み込まれているので、大丈夫だと思います...

于 2010-02-05T14:23:21.000 に答える
2

私は私のものを取り除いたことはありません:)

一部の人々は、条件付きコンパイル/コンパイラ マクロを推奨しているため、NSLog をまったく使用せずにビルドを作成できますが、それは報酬がほとんどないのに労力がかかりすぎると思います。

ただし、NSLogs はアプリの速度を (わずかに) 低下させるため、パフォーマンスに直接影響を与えるものはすべて削除します。また、アプリの実装方法などを非表示にするために、一部のデバッグ ログ情報を削除することもできます。

お役に立てば幸いです。

サム

于 2010-02-05T14:30:17.503 に答える
2

XCode4 は、これに対する非常に優れた解決策を提供します - ブレークポイントを使用します。アクション「メッセージをログに記録」を選択し、メッセージとしてval = @val@を設定し、「アクションの評価後に自動的に続行」ボックスにチェックマークを付けます。

すべてのユースケースに適合するわけではありませんが、値を簡単に「検査」できるという利点があり、値がリリースされないことを保証します。

于 2011-07-07T23:49:16.707 に答える
1

userPrefs(plist)に格納されている0または1に設定された「useDebugMode」シングルトンintを使用するだけです。また、iPhoneのUUIDに応じて、設定画面に「デバッグモードの使用:オン/オフ」トグルを追加して、将来的に製品版で問題をデバッグできるようにします。これにより、将来、プログラムの問題について不満が出た場合に、(ダウンロードしたXMLを使用して)データの問題をデバッグできます。次に、すべての「NSLog」と「printf」を

if (useDebugLog == 1)
{
     NSLog(@"debug statement");
}

これは私にとってはうまくいきます...もちろん、:

 if (useDebugLog == 1)

私が対処したいと思っているオーバーヘッドが発生します。

于 2010-02-07T06:03:11.330 に答える
0

リリースで NSLog を使用することの問題ではありません。しかし、貴重なデータをログに記録すると、他のユーザー (開発者) がそのデータを見ることができます。いくつかのダウンロードリンクなどのように..

于 2011-03-17T07:15:42.030 に答える