2010-11-22 19 views
3

!variableの最終結果であるvariable==nilと同じでも、私は私がアイバーズが「ゼロ」(すなわち、O)に初期化されていることをどこかで読んだと思うが、悲しいことに、私は今それを見つけた場所を見つけるように見えることはできません。私が正しければ、この初期化はiVarを宣言することのない部分にするか、それは@propertyのような何かにリンクされていますか?"!"と "nil"は同じ結果を出しますか? Objective-Cで

すなわち、これらは同じことを評価しない...

if(!myObject) ... 

if(myObject == nil) ... 

乾杯ゲイリー。

編集:うまくいけば、より明確にするため

答えて

3

ご質問は件名と本文を問う質問の件名に答えるために異なるものを求めているように見えるので...

:いいえ、!nilはすべて同じではありません。 nilは質問自体に答えるために0

ためのマクロですながら!は、(他の何かを返すとつまり、!0戻り1! 0)、オペランドの論理否定を返す演算子である:はい、!foofoo == nilは、オブジェクト変数に対して同じ結果を返します。そして、はい、インスタンス変数は0に初期化されます。それは静的変数とグローバル変数です。

+0

私は質問がひどく言われたと思う、彼らは操作の点で同じではないことを理解している、私は明らかにされている必要があり、 – fuzzygoat

1

!ない手段Cの論理演算子である(等& &はを意味し、|| 又はを意味します)。

nilは初期化されないオブジェクトポインタを表現するための方法です。

ポインタに適用すると、ポインタがNULLまたはnilの場合は常にTRUEになります。最後に

if(!myObject)if(myObject==nil)は同じ動作をします。 Objective-Cの!において

+1

申し訳ありませんが、私は!のmyObjectという時になったいたものとmyObjectという== nilを(TRUEまたはFALSEを与える)(TRUEまたはFALSEなりますか)? – fuzzygoat

1

はブール演算子であり、ブール値または式の結果の反対を返します。以下の例では、myObjは実際にポインタ値をブール値、ゼロまたは非ゼロとして評価しています。 myObjはゼロでないポインタなので、これは真と評価されます。 !myObjは反対を返します。この場合、falseを返します。

id myObj = nil; 
int x = 0; 
if (myObj) 
    x++; 
+0

"myObjは真であると評価される有効なポインタです"ではありません。これは、ゼロでないポインタであるためです。 – warrenm

+0

それは私が意味するものですが、あなたは正しいです、私は私が意味したものを入力しませんでした。私は私の答えを更新します、ありがとう。 – slycrel