1. 程式人生 > >OC中nil、Nil、NULL、NSNULL的一些區別

OC中nil、Nil、NULL、NSNULL的一些區別

雖然我們平常接觸的最多的是nil,但是如果對Nil、NULL、NSNULL、nil之間的還是傻傻分不清楚的話,沒準哪天“陰溝裡就翻船了”。(ps:其實我也是今天將這團亂麻理順)

nil、Nil

nil在Swift中表示的是值缺失,而在OC中它所代表的是物件的指標不在指向系統為它所分配的記憶體空間,此時可以理解為建立的指標型別變數不再有所指的實體物件,即指標本身被幹掉了,這個指標就不能再被使用了,而當物件實體沒有被任何指標所指向時(此時的自動引用計數值為0),系統就可以回收那塊沒有任何用處的記憶體。而Nil則是表示是類物件(其實OC中類也是一種物件),與nil的作用類似。(ps:當使用if語句時,它們作為判斷條件時的作用與0是相當的)

NULL

既然OC中已經用nil、Nil分別來表示物件和類的空指標(如果你對空指標進行操作,就會在執行時報出“經典的空指標異常”,區別於野指標,空指標異常是指傳送訊息給它沒有任何問題,但不會得到有意義的執行),那麼對於賦值(assign)型別的指標為空又如何表示呢?沒錯,就是NULL。其實NULL是一個符號常量,代表整數0。在stdio.h標頭檔案中對NULL進行了定義:

#define NULL 0

對於指標變數值為NULL,可認為它的值為0。而與指標變數未賦值是不同的概念,後者表示的是它的值是一個無法預料的值,也就是說它可能指向一個事先為指定的單元,這是很危險的情況。所以在引用指標變數之前應對它賦值。

NSNULL

NSNULL它是一個OC類,它只能通過一個方法建立單例的物件,像這樣:

NULL *null = [NSNULL NULL];

它主要用於建立集合中的空物件,常用作佔位符。如果你想建立一個集合,當前某個索引暫時沒有值,你可能就會用到它,比如在JSON的解析中。因為OC中的字典和陣列只能儲存物件,而JSON中可能存在null的值,所以就只能用NSNULL物件來表示。但是NSNULL無法像nil那樣對所有的方法進行響應,當向NSNULL物件傳送訊息時,App就會崩潰。

總結

如果你想通過簡單的賦值方式建立集合,那麼新增到集合裡面的元素一定不能有nil。使用nil同時也會影響OC對集合的計數,就像是C中對字串的計數是以’\0’結束的一樣,各位新手兄弟(ps:像我一樣)可以自己試試。

寫在後面的擴充套件資料<2016.10.2>

相關推薦

淺談iOS nilNilnull以及NSNull區別

以下程式碼是直接在工程中驗證的,所以可以直接貼上到工程中檢視執行結果。 關於null的用法還不是太明確,歡迎交流。 //******************nil  Nil  null  NSNull**************     NSDictionary

nilNilNULLNSNull區別

1.nil 指向一個物件的指標為空 在objc.h中的定義如下所示: #ifndef nil # if __has_feature(cxx_nullptr) #   define nil nullptr # else #   define nil __DARWIN_

nilNilNULLNSNull區別

2. NSNull NSNull和nil的區別在於,nil是一個空物件,已經完全從記憶體中消失了,而如果我們想表達“我們需要有這樣一個容器,但這個容器裡什麼也沒有”的觀念時,我們就用到NSNull,我稱它為“值為空的物件”。如果你查閱開發文件你會發現NSNull這個類是繼承NSObject,並且只有

shell輸入輸出重定向,>>><<>/dev/null2>&1<<end<<EOF等

轉載自:https://www.jb51.net/article/106373.htm https://blog.csdn.net/qq_31073871/article/details/80810306 其他參考:www.runoob.com/linux/linux-shell-io-re

shell輸入輸出重定向,>>><<>/dev/null2>&1<<end<<EOF等

實際上,輸入輸出重定向中的3個標準檔案描述符,輸入0、正常輸出1、錯誤輸出2,這三個值經常被省略。 舉例: ls > shell_out 等價於: ls 1> shell_out 前言 相信大家經常能在shell指令碼中發現>/dev/nu

OC多執行緒的使用概念建立方式生命週期使用注意等

     程序 什麼是程序:在我們的系統中正在執行的程式 程序的作用:負責給應用程式分配記憶體空間(該空間是受保護的,獨立的) 執行緒 什麼是執行緒:執行緒是CPU排程的最小單元,由CPU排程 執行緒的作用:負責執行應用程式中的程式碼,在系統中執行著的程式的程式碼只能由執

關於nilnullNSNull區別

1、nil和null從字面意思來理解比較簡單,nil是一個物件,而NULL是一個值,我的理解為nil是將物件設定為空,而null是將基本型別設定為空的,個人感覺有點像屬性當中,基本型別分配為assign NSString型別一般分配copy,而物件一般用retain。而且我們對於nil呼叫方法,不會產生cr

Objective-c nil, Nil, NULLNSNull區別

在OC中可能經常會遇到 nil,Nil,NULL和NSNull,下面分析一下之間的區別: Symbol Value Meaning NULL (void *)0 literal null value for C pointers nil (id)0 literal n

關於nilnullNSNull區別及相關問題

1、nil和null從字面意思來理解比較簡單,nil是一個物件,而NULL是一個值,我的理解為nil是將物件設定為空,而null是將基本型別設定為空的,個人感覺有點像屬性當中,基本型別分配為assign NSString型別一般分配copy,而物件一般用retain。而且我們對於nil呼叫方法,不會產生cr

c語言關於srand((unsigned)time(NULL))和rand的區別

一直以為rand()直接生成不同的隨機數,實驗結果不對才搜了下原因,轉載分享下... 可以認為rand()在每次被呼叫的時候,它會檢視: 1) 如果使用者在此之前呼叫過srand(seed),給seed指定了一個值,那麼它會自動呼叫 srand(seed)一次來初始

OCnilNilNULLNSNULL一些區別

雖然我們平常接觸的最多的是nil,但是如果對Nil、NULL、NSNULL、nil之間的還是傻傻分不清楚的話,沒準哪天“陰溝裡就翻船了”。(ps:其實我也是今天將這團亂麻理順) nil、Nil nil在Swift中表示的是值缺失,而在OC中它所代表的

scala的option[T]AnyNothingNullnullNilNoneSome和Unit

scala中的option[T]、Any、Nothing、Null、null、Nil、None和Unit   1 Option[T] 、 None 和 Some Option定義: package scala @scala.SerialVersionUID(val

iOSnilNilNULLNSNull的理解和用法詳解

nil 這個也是條件編譯的,那麼對於我們Objective-C開發來說,nil就代表((void *)0)。 我們使用nil表示Objective-C物件為空,如NSString *str = nil。 我們給物件賦值時一般會使用object = nil,表示我想把這個物件釋放掉;

Objective-C NULLnilNilNSNull 的定義及不同

理解”不存在“的概念不僅僅是一個哲學的問題,也是一個實際的問題。我們是有形宇宙的居民,而原因在於邏輯宇宙的存在不確定性。作為一個邏輯系統的物理體現,計算機面臨一個棘手的問題,就是如何用”存在“表達”不存在“。–摘自 NSHipster 這段話讀起來怪怪的,畢竟是翻譯過來的,

iOSnil NULL Nil NSNull區別詳談

1.nil  >Defines the id of a null instance.  定義一個例項為空, 指向oc中物件的空指標.  >示例程式碼:   NSString *someString = nil;   NSURL *someURL = nil;  

OC語法--nil Nil NULL NSNul用法及OC異常處理

Cup *cup = [[Cup alloc] init]; @try {  [cup fill]; }  @catch (NSException *exception) { NSLog(@"main: Caught %@: %@", [exception name], [exception reason]

NILNILNULLNSNULL區別

前言 記得曾經有不少朋友問過筆者,在Objective-C中nil和Nil以及NULL的區別。最重要的是,在面試中還有不少朋友常會被問到。記得當年剛找工作的時候,筆者就被面試官問到過,現在筆者在這裡統一詳細說明。 NULL 對於學習過C/C++

id型別nilNilNULLNSNull型別是什麼?

id型別:是一個獨特的資料型別,可以轉換為任何資料型別,id型別的變數可以存放任何資料型別的物件,在內部處理上,這種型別被定義為指向物件的指標,實際上是一個指向這種物件的例項變數的指標 id宣告的物件

ios學習——nilNULLNSNull

  nil用來給物件賦值(oc的任何物件都屬於id型別),NULL則給任何指正賦值,NULL和nil不能互換,nil用於類指標賦值(在oc中類是一個物件,是類的meta-class的例項),而NSNull則用於集合操作,雖然它們表示的都是空值,但使用場合完全不同,所以在編碼

JS判斷nullundefined與NaN的方法

amp parseint syntax alt ref lin too command code 寫了個 str ="s"++; 然後出現Nan,找了一會。 收集資料如下判斷: 1.判斷undefined: ? 1 2 3 4