2011-12-02 9 views

答えて

6

これらはかなり異なっています。

最初にオブジェクトポインタを辞書から取得し、ポインタBOOLとして解釈します。これは、任意の非nilポインタYES、及びNOとしてnilとして解釈されることを意味します。具体的な例では、ディクショナリにはnilポインタを含めることができないため、このコード行からはYESしか取得できません。

もう一つは、そのオブジェクトにメッセージboolValueを送信し、辞書から同一のオブジェクトを取ります。恐らく、オブジェクトがメッセージを認識すると、そのオブジェクトのバージョンはBOOLになります。

辞書キー@"boolValue"と関連NSNumberが含まれている場合、具体的な例として、そうでなければNONSNumberメッセージboolValueを受け取り、それが非ゼロ復帰YESである場合。

だからあなたの質問に答えるために、あなたは二番目の形式を使用する必要があります。 BOOLへのポインタをキャストすることはめったに意味がありません。

6

いいえ、それらは同じではありません。違いは、2番目は正しいもの、1番目は正しくないということです。あなたの第1ラインで

あなたは単にポインタがnilであるか、実際のオブジェクトに格納されている値とは何の関係も持っていないかどうかのチェックとほぼ同等であるBOOLへのポインタをキャスト。

3
[[dictionary objectForKey:@"boolValue"] boolValue]; 

はキャストではありませんが、NSNumberのメソッドを呼び出してboolを返します。キャスト内は関与している可能性がありますが、実装の詳細は公開されていません。

関連する問題