Hatena::ブログ(Diary)

iPhone充日記

2011-03-19

NSNullとnilの違い

| 05:43

NSNullとnilの違いを理解しておらずハマりました。

NSNull Class Reference

The NSNull class defines a singleton object used to represent null values in collection objects (which don’t allow nil values).

NSDictionaryやNSArrayなどにはnilが格納できないため、NSNullのインスタンス[NSNull null]を用いて無効値が表現されるようです。

[NSNull null]とnilは別物なので、nilとの比較だけ行っているとエラーが出ます。

NSDictionary *dic = 〜;

NSString *text = [dic objectForKey:@"text"];
NSLog(@"text:%@",text); // text:<null>

if(text != nil){
	// error
	text = [text stringByAppendingFormat:@"test"];
}

こんなエラーが出ると思います。

[NSNull stringByAppendingFormat:]: unrecognized selector sent to instance〜

[NSNull null]はシングルトンインスタンスなので、常に1つの同じインスタンスを指します。

比較方法は以下のような感じです。

if(![text isEqual:[NSNull null]]){
	text = [text stringByAppendingFormat:@"test"];
}

[NSNull null]とnilはNSLogで出力した場合、出力の方法が異なるようです。デバッグ時に参考にしてください。

  • [NSNull null]:<null>
  • nil:(null)

参考リンク

NSNull Class Reference

トラックバック - http://d.hatena.ne.jp/shoby/20110319/1300567422