2011-11-25 4 views
4

最近、シミュレータ上で完全に動作するコードが少しありました。どうして? - それは非常に簡単ですが、私は説明を説明することはできません。iPhone - デバイスのデフォルトのブール値が異なる

私は、新しいビューベースのアプリケーションを作成することによって、少しテストをしたラベルとラベルのための出口を追加した、とのviewDidLoadでこのコードを書いた:興味深いことに

BOOL b; 
if (b) { 
    label.text = @"Value = YES"; 
} 
else { 
    label.text = @"Value = NO"; 
} 

、ここにあります結果:

iOSシミュレータ(4.2):値= NO
iOSシミュレータ(4.3):値= NO
iPod touchの2G(4.2.1)値= YES
iPhone 3G(4.2.1)値= YES

これは何を示唆していますか? - 私にとってはデバイス上のように見えますが、デフォルトのブール値はYESで、シミュレータではデフォルトのブール値はNOです。

誰にも分かりますか?また、誰かがその行動を説明できるなら、私は非常に興味があります。

私はではありません。問題の解決に興味がありますが、希望のデフォルト(私の場合はNO)を手動で設定することで解決できます。

ありがとうございました。

+0

すごく面白い、それを指摘してくれてありがとう! – DanZimm

答えて

5

Objective-Cは単なるCのスーパーセットであり、Cではこのような変数を宣言するとスタック上にメモリが与えられます。変数は宣言されても何も設定されていないので、スタック上の最後の変数は変数bにあります。

要するに、定義されておらず、実装ごとに異なります。それがスペックです。

+0

しかし、この動作は本当に一貫しています...私はこれを何度も繰り返してきましたが、それは複数のアプリケーションで発生します –

+0

セキュリティ上の理由から、OS Xではアプリケーションのメモリが使用前にゼロになっていると思われます閉鎖された後に他の人の記憶を読んでいる間にスヌープする)。 – joerick

+0

しかし、iOSでは、BOOLは実際には8ビットの値であるため、YESを見る可能性がさらに高くなります。また、 'if'は0以外の値をYESとみなします。 – joerick

4

未定義の動作は未定義です。

関連する問題