2

2 つのファイルを fileId で比較しようとしています。 fileIdですNSNumber。whileとがメモリ内で同じ場所を持っていたのに、if ステートメントが true を返さず、比較の使用が true になるまでメソッドが true を返さなかった
ことに驚きました。filelFileisEqualToNumber

同じメモリ アドレスを持つ 2 つの項目が==比較に true を返さないのはなぜですか?

比較が失敗した == 比較のスクリーンショットですが、isEqualToNumber 比較に巻き込まれています

4

1 に答える 1

4

よく見る。fileとのアドレスを比較しているのではなくlfile、それぞれfileIdのプロパティから返された値を比較していることに注意してください。

fileIdプロパティが基になるオブジェクトのコピーを返す場合、返される 2 つの値は、 2 つの異なるオブジェクトであるため、等値 ( ) 演算子NSNumberと比較して等しくなりません。==ただし、それらはメソッドによって等しいと見なされisEqualToNumber:ます。

于 2012-10-01T21:32:03.983 に答える