亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

總結IOS中nil、Nil、NULL和NSNull區別

2020-01-26 14:29:33
字體:
來源:轉載
供稿:網友

NULL

對于學習過 C/C++ 語言的朋友,對 NULL 一定很熟悉吧?這就是在 C/C++ 中的空指針。

在 C 語言中, NULL 是無類型的,只是一個宏,它代表空。我們不研究 C++ 中的 NULL ,因為在 C++11 以后又有了新的定義,我們不深究。

這就是 C 語言中所謂的 NULL ( C++ 的定義比較復雜,這里不說了):

Objective-C

#if defined(__need_NULL)#undef NULL#ifdef __cplusplus# if !defined(__MINGW32__) && !defined(_MSC_VER)# define NULL __null# else# define NULL 0# endif#else# define NULL ((void*)0)#endif

 這是在 stddef.h 頭文件中聲明的。這是使用了條件編譯的, __cplusplus 這個宏表示 C++ ,對于我們 Objective-C 開發來說, NULL 就表示 ((void*)0)

像 C 語言中,我們定義了一個指針,當我們使用完以后,通常會設置指向 NULL 。如果沒有設置,這個指針就成了所謂的野指針,然后其它地方不小心訪問了這個指針是很容易造成非法訪問的,常見的表現就是崩潰了。

既然 Objective-C 是基于 C 語言的面向對象語言,那么也會使用到 C 語言類型的指針,比如使用 const char * 類型,判斷是否為空時,是使用 p != NULL 來判斷的。

nil

對于我們學習 Objective-C 的人來說,這個是非常熟悉的。如下為官方定義:

Objective-C

#ifndef nil# if __has_feature(cxx_nullptr)# define nil nullptr# else# define nil __DARWIN_NULL# endif#endif

對于我們 Objective-C 開發來說, nil 就是 __DARWIN_NULL ??聪鹿俜蕉x:

Objective-C

#ifdef __cplusplus#ifdef __GNUG__#define __DARWIN_NULL __null#else /* ! __GNUG__ */#ifdef __LP64__#define __DARWIN_NULL (0L)#else /* !__LP64__ */#define __DARWIN_NULL 0#endif /* __LP64__ */#endif /* __GNUG__ */#else /* ! __cplusplus */#define __DARWIN_NULL ((void *)0)#endif /* __cplusplus */

這個也是條件編譯的,那么對于我們 Objective-C 開發來說, nil 就代表 ((void *)0)

我們使用 nil 表示 Objective-C 對象為空,如 NSString *str = nil 。

Nil

先看看官方是如何聲明的:

Objective-C

#ifndef Nil# if __has_feature(cxx_nullptr)# define Nil nullptr# else# define Nil __DARWIN_NULL# endif#endif

根據條件,我們做 Objective-C 開發的,那么 Nil 也就是代表 __DARWIN_NULL ,而對于 __DARWIN_NULL 的聲明如下:

Objective-C

#ifdef __cplusplus#ifdef __GNUG__#define __DARWIN_NULL __null#else /* ! __GNUG__ */#ifdef __LP64__#define __DARWIN_NULL (0L)#else /* !__LP64__ */#define __DARWIN_NULL 0#endif /* __LP64__ */#endif /* __GNUG__ */#else /* ! __cplusplus */#define __DARWIN_NULL ((void *)0)#endif /* __cplusplus */

這個也是條件編譯的,那么對于我們 Objective-C 開發來說, Nil 也就代表 ((void *)0) 。

但是它是用于代表空類的。比如:

Objective-C

Class myClass = Nil;

NSNull

先看看官方的聲明:

Objective-C

NS_ASSUME_NONNULL_BEGIN @interfaceNSNull: NSObject <NSCopying, NSSecureCoding> + (NSNull *)null; @end NS_ASSUME_NONNULL_END

由此我們可知, NSNull 是繼承于 NSObject 的類型。它是很特殊的類,它表示是空,什么也不存儲,但是它卻是對象,只是一個占位對象。

使用場景就不一樣了,比如說服務端接口中讓我們在值為空時,傳空。

Objective-C

NSDictionry *parameters = @{@"arg1" : @"value1",       @"arg2" : arg2.isEmpty ? [NSNull null] : arg2};

這只是隨手舉的例子,當然我們也可以不傳這人參數。如果我們要統一,比如通過 runtime 來動態將對象轉成我們的參數時,那么可以統一將值為 nil 的都設置為 [NSNull null]

區別

NULL 、 nil 、 Nil 這三者對于 Objective-C 中值是一樣的,都是 (void *)0 ,那么為什么要區分呢?又與 NSNull 之間有什么區別:

NULL 是宏,是對于 C 語言指針而使用的,表示空指針
nil 是宏,是對于 Objective-C 中的對象而使用的,表示對象為空
Nil 是宏,是對于 Objective-C 中的類而使用的,表示類指向空
NSNull 是類類型,是用于表示空的占位對象,與 JS 或者服務端的 null 類似的含意

總結

以上只是小編的個人見解,如果疑問之處,歡迎留言討論,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97色在线观看| 国产亚洲欧美一区| 中文日韩在线观看| 日韩免费在线免费观看| 欧美成人全部免费| 国产成人精品久久亚洲高清不卡| wwwwwwww亚洲| 亚洲二区在线播放视频| 欧美日韩国产精品一区二区三区四区| 韩曰欧美视频免费观看| 国产精品亚洲综合天堂夜夜| 中文字幕在线亚洲| 97人人模人人爽人人喊中文字| 欧美最顶级的aⅴ艳星| 色多多国产成人永久免费网站| 国产精品无av码在线观看| 国产精品入口夜色视频大尺度| 97免费中文视频在线观看| 91精品视频免费看| 川上优av一区二区线观看| 九九精品在线视频| 国产精品成人aaaaa网站| 亚洲精品成a人在线观看| 欧美中文在线观看| 久久久久久69| 亚洲精品日韩激情在线电影| 永久555www成人免费| 久久久久久久色| 欧美一级电影免费在线观看| 91久久久在线| 日韩暖暖在线视频| 97色在线观看免费视频| 亚洲人成啪啪网站| 亚洲男人天堂2024| 成人午夜黄色影院| 91精品国产电影| 国精产品一区一区三区有限在线| 日韩小视频网址| 91精品国产91久久| 国产精品久久久久久久久久免费| 91精品国产高清久久久久久久久| 国产精品免费小视频| 午夜精品一区二区三区在线| 日韩经典一区二区三区| 国产精品久久久久久久久久久久久| 欧美性猛交xxxx免费看久久久| 国产精品香蕉av| 欧美精品18videosex性欧美| 欧美国产日韩视频| 日韩a**站在线观看| 欧美精品久久久久| 色狠狠av一区二区三区香蕉蜜桃| 欧美乱大交xxxxx| 深夜福利一区二区| 欧美最猛性xxxxx(亚洲精品)| 日韩美女视频中文字幕| 羞羞色国产精品| 国产成人亚洲精品| 亚洲欧洲在线视频| 亚洲国产精品久久久| 亚洲韩国日本中文字幕| 国产精品视频播放| 亚洲国产精品久久久久秋霞蜜臀| 久久视频在线免费观看| 亚洲精品在线看| 亚洲欧洲第一视频| 热99在线视频| 性视频1819p久久| 国产精品第一视频| 亚洲成年人影院在线| 日韩少妇与小伙激情| 免费不卡欧美自拍视频| 国产精品美女主播在线观看纯欲| 法国裸体一区二区| 国产做受高潮69| 夜夜狂射影院欧美极品| 久久久精品国产网站| 欧美精品在线免费观看| 性欧美亚洲xxxx乳在线观看| 一本大道久久加勒比香蕉| 欧美精品aaa| 在线国产精品播放| 欧美成人免费在线观看| 日韩av大片免费看| 国产剧情日韩欧美| 亚洲欧美国产视频| 91网站在线免费观看| 日韩在线小视频| 亚洲最大福利视频网站| 欧美wwwwww| 国产精品偷伦一区二区| 超碰97人人做人人爱少妇| 欧洲精品久久久| 午夜精品三级视频福利| 亚洲国产精品va在看黑人| 亚洲视频在线免费观看| 色综合视频网站| 欧美黑人xxx| 综合网日日天干夜夜久久| 日韩电影中文字幕在线观看| 欧美中文在线字幕| 欧美一级电影免费在线观看| 最近中文字幕mv在线一区二区三区四区| 欧美人成在线视频| 亚洲激情在线观看视频免费| 欧美国产一区二区三区| 国产精品国产自产拍高清av水多| 欧美一区视频在线| 亚洲乱亚洲乱妇无码| 成人高清视频观看www| 中文字幕亚洲字幕| 日韩一区二区三区xxxx| 欧洲精品在线视频| 欧美成人精品在线| 欧美专区在线视频| 久久的精品视频| 国产精品极品美女在线观看免费| 色综合五月天导航| 色综合久综合久久综合久鬼88| 人人做人人澡人人爽欧美| 日韩av黄色在线观看| 久久久久久久久久久免费| 国产精品久久久久av免费| 国产精品成av人在线视午夜片| 琪琪第一精品导航| 亚洲白拍色综合图区| 中文字幕亚洲国产| 久久精品青青大伊人av| 51午夜精品视频| 超碰精品一区二区三区乱码| 日韩一区二区三区在线播放| 国产成人精品久久二区二区91| 亚洲欧美在线x视频| 亚洲高清在线观看| 亚洲成人亚洲激情| 青青青国产精品一区二区| 国产日韩在线看| 欧美特黄级在线| 91香蕉嫩草神马影院在线观看| 一区二区三区久久精品| 国产成人久久久| 国产精品视频在线播放| 国产成人在线一区| 国产区亚洲区欧美区| 蜜臀久久99精品久久久久久宅男| 亚洲激情 国产| 国产一区二区在线免费视频| 欧美日韩国产123| 久久久97精品| 亚洲天天在线日亚洲洲精| 亚洲va码欧洲m码| 亚洲国产日韩欧美在线动漫| 视频在线观看99| 中文字幕av一区| 992tv成人免费影院| 久久久久久久久久久av| 欧美性感美女h网站在线观看免费| 亚洲电影免费观看高清完整版| 亚洲国产另类 国产精品国产免费| 亚洲视频在线免费看| 亚洲成人av片| 国产成人精彩在线视频九色| 日韩成人激情在线| 亚洲美女在线观看|