tokoromのその他の日記
- vim関連: vimまっしぐら★
- それ以外: 寄り道ばかりの お勉強日記★
2009-12-03NSLogとNSAssertをリリース時に無効化する
NSLogとNSAssertをリリース時に無効化する
デバッグ時に有用なNSLogやNSAssertですが、リリース時には自動で無効化して綺麗にしておきたいものです。
これらが残っているだけで無駄にモジュールサイズが増えますし(文字列定数分のサイズは馬鹿にならない)。
ただ、だからといってNSLogにDebugLogなどの別名を付けて、それをプリプロセッサで無効化するというのもいまいちな気がします。できれば、NSLogはNSLogとして使いたいところです。
NSAssertをリリース用ビルド時に無効化
NSAssertはNS_BLOCK_ASSERTIONSが定義されていると無効化されます。そのため、リリース用のプロジェクト(ターゲット)の情報のbuildのところでOTHER_CFLAGSというキーで「-DNS_BLOCK_ASSERTIONS=1」を加えてやれば、リリース用ビルド時にNSAssertが抹消されてからコンパイルされるようになります。
※情報元:http://romly.com/archives/2009/07/block_nsassert.html
NSLogをNSLogとして記述し、かつリリース用ビルド時に無効化
ここでは、簡易的に上記のNSAssertのときに使ったNS_BLOCK_ASSERTIONSの定義をそのまま使ってしまいます。 NS_BLOCK_ASSERTIONS が定義されているときをリリース用ビルド時とみなし、全ソースから参照するヘッダー(プリコンパイル済みヘッダー等)で以下のようなコードを記述してNSLogを切り替えるようにします。
#if !defined(NS_BLOCK_ASSERTIONS) #if !defined(NSLog) #define NSLog( m, args... ) NSLog( m, ##args ) #endif #else #if !defined(NSLog) #define NSLog( m, args... ) #endif #endif
これにより、リリース用ビルド時にNSLogの記述が無効化された状態でコンパイルされます。
※2010/4/21 追記
Snow Leopard にバージョンアップしたら↑のコードがWarningになるケースがあったので、Snow Leopard対応版についてコチラに追記させていただきました。
Ellen2011/05/15 00:33What a joy to find someone else who tihkns this way.
wmqbwp2011/05/15 12:27u7M14C <a href="http://xnyjfnjlzqol.com/">xnyjfnjlzqol</a>
vetwfcxcr2011/05/24 22:15tMLm73 <a href="http://zpjjwmcdkfez.com/">zpjjwmcdkfez</a>
tlkvncppvfc2011/05/30 01:13NQUP1l , [url=http://tuuvsxffpdkd.com/]tuuvsxffpdkd[/url], [link=http://cxsrehaereug.com/]cxsrehaereug[/link], http://gflsbabibsmc.com/


iPhoneプログラミング UIKit詳解リファレンス
詳解 EZアプリ(BREW)プログラミング