iOSの-NSAssertを使用して開発アサーション()

アサート(主張)は、開発中の使用を意味するようにセルフテストプログラムコード実行時(通常サブルーチンまたはマクロ)。アサーションが真である、それはその通常の操作手順を示しており、主張は虚偽である、それはコード内で予期しないエラーを発見したことを意味します。アサーションは、高い信頼性の要件については、大規模で複雑なプログラムまたはプログラムのために特に有用です。

アサーションの詳細については、私たちは「防御的プログラミング」の章の「完全なコード2」を参照してくださいすることをお勧めしなければなりません。以下は、古典コードアサーションの使用に関する完全な指導・助言の一部から抜粋:

 

  1. エラー処理の状況を処理するコードは発生しませんな状況に対処するためのアサーションと、発生することが予想されると。

  2. コードの実行を回避するためにアサーションを置く必要があります

  3. そして、条件の前と後の状況を確認するために、アサーションでアノテート

  4. コードの高い堅牢性のために、あなたはエラーを再処理するアサーションを使用する必要があります

内部システムからの信頼性の高いデータが外部の信頼できないアサーション上のデータは、外部の信頼できないデータのために、あなたはエラー処理コードを使用する必要がありますのではなく、アサーションを使用しています。アサーションは、実行可能な注釈として見ることができます。

外部システムデータ(ユーザ入力、ファイル、ネットワークは、等を読み出し)が信頼できるものではなく、厳密なチェック(通常はエラー処理)の必要性は、ガードに相当する内部システム、中に放出することができます。(例えばサブルーチンコールのような)システム内の相互作用のためのように、また、すべてのデータ入力は、それがシステムに相当する場合に対処しなければならないことは確かな境界ではなく、コードが肥大化し複雑になることができる。実際には、システムにサブルーチンに渡された内部は、適切なデータが発呼者の責任であるべき所望の、システム内の発呼者は、データがサブルーチンに渡されることを保証する必要があり正常に動作が適切です。このように、信頼できない外部環境と内部環境信頼性の高いシステムを隔離複雑さを低減します。

しかし、開発段階で、コードはおそらく外部データは、おそらく失敗したサブルーチンコールの結果、サブルーチンコールシステム・コードの内部エラーが発生した、包括的な十分に考えられ扱う、欠陥を含む可能性があります。今回、アサーションが役割を果たすことができ、サブルーチンコールの出現につながった問題の一部に障害が発生したことを最後に確認されます。差別クレジットシステムのすべての欠陥を清掃した後に確立されます。リリース時まで待って、これらの主張が存在する必要ないはずです。

iOSの開発では、プログラムで処理する()をアサートマクロNSAssertを使用することができます。NSAssertは()それは開発者ができるだけ早くバグを見つけやすくすることができ、正しく使用しました。デバッグ版とリリース版:ほとんどのプロジェクトは2つのバージョンが利用可能であるため、開発者は、アサートチェックされたアプリケーションの各バージョンには必要ありません。デバッグバージョンでは、開発者がすべてのアサーションがチェックされていることを願っていますし、リリースバージョンでは、多くの場合、アサーションチェックを無効にします。セット・リリースのバージョンを無効アサーション次のように:

デバッグバージョンとリリースバージョン:ビルド設定メニューでは、プログラムは、コンフィギュレーションを生成するために、以下の項目は、選択肢を持っているプリプロセッサマクロ項目、プリプロセッサマクロを見つけます。リリースエントリー、セットNS_BLOCK_ASSERTIONSではなく、アサーションチェックを選択します。図に示すように。

ここでは、名前の入力で見つかった手順にアサーションを追加し、名前内の機能を印刷例外がスローされ、空です。

 

 
  1. - (void)printMyName:(NSString *)myName

  2. {

  3. NSAssert(myName != nil, @"名字不能为空!");

  4. NSLog(@"My name is %@.",myName);

  5. }


関数(がmyName)に渡されるパラメータが空である場合に、アサーションは、プログラムのクラッシュ、実行されると、アサーション記述情報アウトプリント。この実施形態では、コンソールは、以下のログを出力します:

 

 

NSAssert [1268:A0B] ***でアサーション失敗 - [ViewControllerをprintMyName:]  

NSAssert / NSAssert / ViewController.m:38

2013年11月21日13:56:01.927 NSAssert [ 1268:A0B] ***理由、キャッチされない例外により'NSInternalInconsistencyException'にアプリを終了:「 名前を空にすることはできません!"

アサーションは、このことは誤り、どこでエラーが発生したの原因を特定することは容易であることで、受信パラメータは、nullにすることはできませんことを教えてくれる。

私たちはnull以外のパラメータを渡すと、プログラムが正しく入ってくる名前を出力します:

私の名前はUnivCoreです。

以下に、我々は、プログラムが渡されたパラメータが空の場合でも、アサーションが実行されません、以前のセットに基づいて、リリースバージョンに設定されているテストします。次のようにメソッドのリリースバージョンに設定は以下のとおりです。

製品 - > Scheme->編集スキームをクリックして...、(直接のショートカットキーは+シフト+を、コマンドでも)実行キーを選択し、リリースの情報パネルビルド構成を変更し、現在の世代は、変化に配置することができ、リリースのために。次に、ビルドして、プログラムを実行し、それがプログラムのリリースバージョンを生成します。アーカイブ項目について、デフォルトのビルド構成がリリースされることに注意してください。

この時点で、我々はプログラムを実行し、プログラムには、次のステートメントを出力します:

私の名前は(ヌル)です。

このショーは、アサーションコードが実行されていないこと。

 

著作権:https://blog.csdn.net/sharkleegroup/article/details/16859263より転載

公開された83元の記事 ウォン称賛12 ビュー180 000 +

おすすめ

転載: blog.csdn.net/shengdaVolleyball/article/details/83898225