21

私はObjective-Cに関する本を読んでいて、著者は、ローカル変数に値が割り当てられていない場合、それらはnilに設定されますが、静的変数はゼロに設定されると述べました。そこで、設定しint aて値を割り当てませんでした。次にそれNSLog(@"%i", a)を表示しa、ゼロとして表示されました。私はそれについて少し混乱しました、そして誰かが私のためにそれを明らかにすることができるかどうか疑問に思いましたか?

4

2 に答える 2

52

ARC を有効にすると、Objective-C オブジェクト ポインター変数は、作成場所に関係なく nil に設定されます。

ARC がなく、組み込みの C 型の場合、変数は初期化されません。

オブジェクトを割り当てると、Objective-C オブジェクトのインスタンス変数は常に 0 (または nil) に設定されます。

統計は 0 に設定されます。

ただし、変数には常にデフォルト値を与える習慣がついています。良い習慣になりました。

于 2012-04-05T03:26:43.163 に答える
13

いいえ2。「普通の」C と同様に、ローカル変数にはデフォルト値が割り当てられません。(スタックの最初の部分が使用されるときは幸運かもしれませんが、これに頼らないでください! )

とにかく、nil is 0 1 -- つまり、nil == 0常に true です-- つまり、 NSLog("@%i", nil)「ねえ、引数を整数としてログに記録してください」と言いますが、これは ... 0 です。

ハッピーコーディング。


1 gdb の nilは0x0 として定義されていません。これは、Objective-C++ のケースを含む技術的な定義をより詳細にカバーしています。タイプはアーキテクチャによっても変わるため、特定のシステムでは間違っ"@%i"ている可能性が非常に高いことに注意してください。

2 ARC 固有のルールについては、wbyoung の回答を参照してください。

于 2012-04-05T02:56:17.943 に答える