私はiPhoneアプリケーション内でNSAssert()呼び出しを使用していますが、Appleのドキュメントから、NS_BLOCK_ASSERTIONSが定義されている場合、アサーションはコードにコンパイルされないことがわかります。
アサーションをオフにするには、ヘッダーファイルで次のように宣言します。#define NS_BLOCK_ASSERTIONS
ただし、アサートコードはまだ実行されているようです。
ここに欠けているものはありますか?
ありがとう
ジョン
標準テンプレートの1つに基づいてXcodeプロジェクトを作成した場合、Cocoaヘッダー(NSAssert
マクロを含むNSException.h
を含む)は、プロジェクト内の他のファイルの前に前処理されます。したがって、プロジェクトのヘッダーまたは実装ファイルの#define NS_BLOCK_ASSERTIONS
は、NSAssert
マクロに影響を与えません。
NS_BLOCK_ASSERTIONS
をターゲットまたはプロジェクトのプリプロセッサマクロに入れてみてください(リリース構成の場合のみ)。
または、#define NS_BLOCK_ASSERTIONS
または#import <Cocoa/Cocoa.h>
行の前のプレフィックス(.pch)ヘッダーに#import <Foundation/Foundation.h>
を配置します。
@dwsolbergが述べたように、XcodeにはENABLE_NS_ASSERTIONS
と呼ばれる新しいビルド設定があります。新しいプロジェクトの場合、リリース構成の値はNO
に設定され、他のすべての構成の値はYES
に設定されます。この設定と、Xcode6で引き続き有効な広く使用されているNS_BLOCK_ASSERTIONS
アプローチを使用できます。
アサーションは、開発時にバグを追跡するためのツールであり、生産的なコードで発生することはありません。また、例外は、それが絶対に必要な場合、つまり、プログラムが実行を続行できないほど問題が発生した場合にのみ使用する必要があります。 Cocoaの方法は、重要なメソッドにブール値の戻り値を与え、メソッドの内部で設定でき、戻り値がNO
の場合に外部で使用できるエラーオブジェクトでパラメーター化することです。
それが何人かの人々を助けることを願っています;-)