関数コードを NSAssert または NSParameter assert に入れていることに何度か遭遇しました。
NSParameterAssert( [self doSomeWork] );
これに関する問題は、リリース ビルドを実行すると、テストが失敗した場合に中止するコードがコードから省略されるだけでなく、() 内のコードも省略されることです。
明らかに、この修正は簡単ですが、私にはこれがまだ間違っているように見えます。コードのロジックは、テスト ビルドとリリース ビルドの間で変更されています。
このパターンは、アサートが失敗した場合にプログラマーのエラーである場合にのみ使用することを明確にする必要があります。