iOS nil、Nil、NULL、NSNullの理解

1999 ワード

基本概念
Nil:Defines the id of a null instance(公式)、1つの(インスタンス)オブジェクトを指す空のポインタNil:Defines the id of a null class(公式)、1つのクラスを指す空のポインタNULL:他のタイプ(例えば、基本タイプ、Cタイプ)を指す空のポインタNSNull:通常はセット内の空の値を表す
objがnilの場合:[objmessage]はNSExceptionではなくNOを返し、objがNSNullの場合:[objmessage]は例外NSExceptionを放出します
nilとNULLは字面の意味から理解するのが簡単で、nilはオブジェクトで、NULLは値で、私の理解ではnilはオブジェクトを空に設定して、NULLは基本的なタイプを空に設定します.また、nil呼び出しメソッドではcrashや例外は発生しません.NSURL *url = nil; Class class = Nil; int *pointerInt = NULL; Nilはオブジェクトポインタが空で、Nilはクラスポインタが空で、NULLは基本データ型が空です.これらの概念は混同されやすく、場合によっては同じ使い方をしています.まず「空のポインタ」の意味を説明します.空のポインタとは、そのポインタが意味のあるメモリ領域を指していないことを意味します.
基本的な使い方
    NSObject *obj1 = [[NSObject alloc]init];
    NSObject *obj2 = [NSNull null];
    NSObject *obj3 = [NSObject new];
    NSObject *obj4;
    NSArray *arr1 = [NSArray arrayWithObjects:obj1, obj2,obj3, obj4, nil];
    NSLog(@"arr1 count: %ld", [arr1 count]);
//    arr1 count: 3   obj4=nil,   obj4        

    NSObject *obj1;
    NSObject *obj2 = [[NSObject alloc]init];
    NSObject *obj3 = [NSNull null];
    NSObject *obj4 = [NSObject new];
    NSArray *arr2 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4,nil];
    NSLog(@"arr2 count: %ld", [arr2 count]);
//    arr2 count: 0    obj1=nil,             

    //[NSNullnull]         ,  :
    NSObject *obj1 = [NSNull null];
    NSArray *arr1 = [NSArray arrayWithObjects:@"One",@"TWO",obj1,@"Three",nil];
    for(NSString *str in arr1){
        NSLog(@"array object:%@",str);
    }
//    array object:One
//    array object:TWO
//    array object:
//    array object:Three

NSObject *obj1 = [NSNull null];
    NSArray *arr1 = [NSArray arrayWithObjects:@"One",@"TWO",obj1,@"Three",nil];
    for(NSString *str in arr1){
        if(![str isKindOfClass:[NSNull class]]){
            NSLog(@"array object: %@", str);
        }
    }
//    array object:One
//    array object:TWO
//    array object:Three