4

Xcodeの最後のアップデート(v4.6への)以来、私は次の警告をたくさん持っています:

"Direct comparison of string a literal has undefined behavior"

これは、NSStringプロパティが次の方法で別の文字列と比較される場合です。

if ([self.myString isEqualToString:@"Compare Me"]) { ...

もともと比較しましself.myString == @"Compare Me"たが、同じ警告があります。XcodeはisEqual:代わりに使用することをお勧めします。

なぜこれをすべきなのかしら。他の比較は引き続き機能します。例:

if ([segue.identifier isEqualToString:@"nextScreen"]) { // => NO WARNING HERE

編集:OK、信じない/反対票を投じる人は、このスクリーンショットを参照してください: ここに画像の説明を入力してください

4

3 に答える 3

3

Xcode が混乱し、古い警告が表示されることがあります。の使用に関する古い警告が表示されていると思われます==。ビルドを消去し、オーガナイザー ウィンドウに移動して、このプロジェクトの派生データを削除してから、Xcode を再起動します。

于 2013-02-17T17:31:32.500 に答える
-2

「==」を使用する場合、理論上 (C/C++ の場合と同様)、オブジェクトの値ではなくポインターを比較する必要があります。

事実は、obj-c (および私が推測するコンパイラ) は、本当に必要なものを理解し、これを isEqualToString に変換します。しかし、「安全」であるためには、2 つの文字列、2 つの数値などを比較する適切な方法を使用することをお勧めします。

于 2013-02-17T17:16:14.463 に答える