Nil、Nil、NULLの違い

2395 ワード

Nil、Nil、NULLの違い
nil:oc内のオブジェクトを指す空のポインタで、オブジェクトを指します. 
Nil:oc内のクラスを指す空のポインタで、クラスに対して. 
NULL:cタイプのメモリポインタなど、他のタイプの空のポインタを指します.基本データ型は空で、基本タイプです. 
NSNull:集合オブジェクトで空の値を表すオブジェクト.
objがnilの場合:
[obj message]はNSExceptionではなくNOを返します
objがNSNullの場合:
[obj message]異常NSExceptionを投げ出す
nilとNULLは文字通り簡単ですが、
nilはオブジェクトで、NULLは値で、nilはオブジェクトを空に設定していると理解しています.
NULLは基本タイプを空に設定します.また、nil呼び出しメソッドではcrashや例外は発生しません.
次のコードを見てみましょう
// nil     NSURL *url = nil; // Nil    Class class = Nil;
// NULL            int *pointerInt = NULL

Nilはオブジェクトポインタが空で、Nilはクラスポインタが空で、NULLは基本データ型が空です.
この5つの概念は混同されやすく、場合によっては同じ使い方をしています.まず「空のポインタ」の意味を説明します.空のポインタとは、そのポインタが意味のあるメモリ領域を指していないことを意味します.例えばint*p;int *p = 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]); //count: 3   obj=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]); //count: 0,  obj1=nil,              [NSNull null] //          ,  : NSObject *obj1 = [NSNull null];

NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1,@"three",nil]; for (NSString *str in arr1) 
{

  NSLog(@"array object: %@", str);

} //result:One、Two、、three NSObject *obj1 = [NSNull null];

NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1,@"three",nil]; for (NSString *str in arr1) 
{ if (str != [NSNull null])
   {

   NSLog(@"array object: %@", str);

   }

}//result:One、Two、three