macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

NSNullクラス

INDEX>Foundation>

apple(OS X)apple(iOS)

解説

継承 NSObject
準拠 NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 OS X 10.0以降
iOS 2.0以降
定義 NSNull.h

概要

「何もない」ことを表すクラスです。コレクションクラス(NSArrayNSDictionaryNSSet)にオブジェクトを追加する場合に「何もない」ことを表したい場合があると思いますが、コレクションクラスにはnilが使えないため(末尾のマークとして使用されているので)このクラスがあります。

例えば、画像を読み込んで配列に格納するような場合、何かのエラーで画像が読み込めなかったりするとnilが返されたりするとコレクションクラスに追加することができなくなり、順序がずれることが起こりえます。そういった場合にNSNullのインスタンスを追加するといった使い道があります。

NSNullオブジェクトの作成

NSNullオブジェクトの作成には(+ null)メソッドを使用します。

NSNullオブジェクトを配列の要素にする

#pragma mark NSNull null
-(void)method001
{
    NSArray *anArray =[[NSArray alloc] initWithObjects:@"aaa",[NSNull null],@"bbb",@"a",nil] ;
    NSLog(@"%s %@",__FUNCTION__,[anArray description]);
}

NSNullオブジェクトの利用

配列の要素がNSNullかどうか知りたい場合、何を持って判定するかですがNSNullはオブジェクトですのでNULLやnilと比較はできません。isEqual:メソッドでNSNullクラスかどうかを判別します。

配列の要素がNSNullなら NSNull ! とログ表示

#pragma mark NSNull nullの判定
-(void)method002
{
    NSArray *anArray =[[NSArray alloc] initWithObjects:@"aaa",[NSNull null],@"bbb",@"a",nil] ;
    NSLog(@"%s %@",__FUNCTION__,[anArray description]);
    [anArray enumerateObjectsWithOptions:NSEnumerationConcurrent
                    usingBlock:^(id obj,NSUInteger idx,BOOL *stop){
                                  
                                  if ([obj isEqual:[NSNull null]]) {
                                      NSLog(@"NSNull !");
                                  }
                                  return;
                              }];
}

適合するプロトコル

メソッド

サブクラス化の注意