你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS編程技術 >> [swift、oc]淺聊nil、Nil、NULL、NSNull的區別

[swift、oc]淺聊nil、Nil、NULL、NSNull的區別

編輯:IOS編程技術

我們都知道nil、Nil、NULL、NSNull都表示為空但是究竟有什麼區別,相信大家也很少關注。今天我們就淺聊一下這幾個空的區別

1、nil

  nil一般是指把一個對象置空,既完全是一個空對象,完全從內存中釋放。  

2、Nil

  Nil和nil基本沒有任何區別,也可以說只要是可以使用nil的地方都可以使用Nil,反之亦然。但是作為程序猿,我們應該更加嚴謹一些。nil和Nil的區別在於,nil表示置空一個對象,二Nil表示置空一個類。

3、NULL

  大家都知道oc 是基於c的,並且oc是完全兼容c的,NULL源於c,表示一個空指針.

  既:int *p  = NULL

4、NSNull

  NSNull很有意思,大家一般都會覺得,NSNull也是空,但是看著這貨又是“NS”開頭的很像一個對象,實質上NSNull的確是一個對象,他繼承於NSObject。那它和nil的區別在哪裡呢?nil是把一對象完全釋放,就是完全從內存中釋放。但是當我想把一個對象置空但是又想要一個容器的時候,我們就可以使用NSNull。比如一瓶礦泉水,我們不想要裡面的水,但是我們想保留瓶子一樣。看一下代碼的區別

swift:

//  定義一個數組

let mutableArray = NSMutableArray()

// 定義一個字典

let mutableDictionary = NSMutableDictionary()

// 定義NSNull

let null = NSNull()

// 添加到數組

mutableArray.addObject(null)

// 添加到字典

mutableDictionary.setObject(null, forKey: "null")

//***添加NSNull 程序運行很正常,因為 NSNull是一個類有內存地址的,所以添加到字典和數組都不會崩。下面是一下nil

// 添加nil到數組

mutableArray.addObject(nil)

// 添加nul到字典

mutableDictionary.setObject(nil, forKey: "nill")  

//***直接報錯,因為數組和字典裡面存放的都是對象,對象都是有地址的。但是nil內存中沒有地址,所以直接報錯

 

下面是oc版本的,用oc的朋友可以參考一下:

- (void)viewDidLoad {

        [super viewDidLoad];

        NSMutableArray *mutableArray = [NSMutableArray array];

        NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];

      NSNull *null = [NSNull null];

        //  使用NSNull,不會報錯會正常運行

        [mutableArray addObject:null];

        [mutableDictionary setObject:null forKey:@"null"];

         // 如果我們使用nil,沒運行時回報警告,運行時程序會直接崩潰

       [mutableArray addObject:nil];

       [mutableDictionary setObject:nil forKey:@"nil"];

}

以上就是nil、Nil、NULL、NSNull的區別了,在工作中我們一般只使用nil,其他三個我們平時也很少使用。但是作為程序猿的我們,

這樣的問題還是值得我們去了解的。 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved