iOS_OC判空:NULL、nil、Nil、NSNull

NULL = (void *)0         C指針的字面空值
nil = (id)0              OC對象的字面空值
Nil = (Class)0           OC類的字面空值
NSNull = [NSNull null]   空值的OC對象

具體如下: 

//1. NULL
//表示C的指針空值
int *pointerToInt = NULL;
char *pointerToChar = NULL;
struct TreeNode *rootNode = NULL;
// 2. nil
// 表示指向OC對象的指針爲空
NSString *str = nil;
NSURL *url = nil;
id obj = nil;
if (obj == nil) {
  // todo ...
}
// 3. Nil
// 表示只想OC類 類型的指針爲空
Class class = Nil;
Class class2 = [NSString class];
// 4. NSNull:一個OC對象,用於表示空值的類
// 只有一個單例方法:+ (NSNull *)null;
// 一般用於集合對象中保存一個空的佔位對象: \
  因爲Foundation集合對象中,nil通常被用於表示集合對象結束的標誌,\
  因此無法用nil來存儲一個空值,所以一般用[NSNull null]來存


// 例1:當 NSArray 裏遇到 nil 時,就說明這個數組對象的元素截止了
#warning NSArray 只關注 nil 之前的對象,nil 之後的對象會被拋棄!!!
NSArray *array = [NSArray arrayWithObjects:@"one", @"two", nil, @"three"]; // Missing sentinel in method dispatch
NSLog(@"%@", array);
// 結果如下
//  (
//      one,
//      two
//  )
 

// 例2:
// 錯誤的使用
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// [dict setObject:nil forKey:@"friends"];
// 報錯:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSDictionaryM setObject:forKey:]: object cannot be nil (key: friends)'
 
// 正確的使用
[dict setObject:[NSNull null] forKey:@"friends"];

 

reference

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章