1. ホーム
  2. objective-c

[解決済み】Objective-C。NULL、nil、@""の違いは何ですか?

2022-02-22 08:01:36

質問

タイトルの通り、以下の違いは何でしょうか? NULL , nil@"" ?

例えば、辞書の中の文字列が空であることを確認したい場合。

どのような条件を使用すればよいですか?

if ([dictionary objectForKey:@"aString"] == nil)

または

if [[dictionary objectForKey:@"aString"] isEqualToString:@""]

または

if ([dictionary objectForKey:@"aString"] == NULL)

どれが正しいの?

解決方法は?

nil は、NULLのobjective-cオブジェクトに対するアナログです。実は同じなんです。

 //MacTypes.h
 #define nil NULL

だから

if ([dictionary valueForKey:@"aString"]==nil)
if ([dictionary valueForKey:@"aString"]==NULL)

どちらも特定のキーが辞書に存在するかどうかをチェックしますが、1行目の方が客観的なc型をチェックしているのでより正しいです。

についてです。

if ([[dictionary valueForKey:@"aString"] isEqualToString:@""])

この行は、辞書に "aString" というキーがあるエントリーがあるかどうかをチェックし、そのエントリーと空の文字列を比較します。結果は次のいずれかになります。

  • は、そのキーに対応する項目がない場合は false となります。
  • は、キーに対応するエントリが存在し、そのエントリが空文字列である場合に true となります。
  • に応答しない場合、クラッシュする可能性があります。 -isEqualToString: メッセージ

もし、エントリーが存在するかどうかと、それが空文字列でないかのチェックの両方を行う必要がある場合は、2つの条件が必要です。

if ([dictionary valueForKey:@"aString"]==nil ||
               [[dictionary valueForKey:@"aString"] isEqualToString:@""])