iOS之iOS中的(null)、<null>、 nil 的問題,iosnil

來源:互聯網
上載者:User

iOS之iOS中的(null)、<null>、 nil 的問題,iosnil
 摘要: 你有沒有過這樣的經曆,就是介面上顯示出類似<null>、(null)這樣一些東西,有時候還會莫名其妙的閃退。反反覆複真是曰了犬,今天來總結一下這個問題的解決方案

前段時間開發過程中,介面上莫名其妙的有些地方顯示(null)有些地方顯示 <null>,修改起來很蛋疼,經過尋找資料來總結一下其中的微妙,免得以後再在這個東西上花無謂的時間去修改。

 

首先記錄一下我遇到這類問題的解題思路,最簡單直接的方法是:首先定位到出問題的位置,然後用暴力方式把這個變數列印出來!

列印分兩種:①%p列印地址;②%@列印對象的描述(字串對象就是其本身)

本文先說結論再展開來講。

總結:0. nil、NULL本質上是相同的,都指向0x0地址,[NSNULL null]是一個對象,儲存在常量區,佔用著固定地址。

         1.nil 表示一個指標指向的對象為空白,這個對象的類型是id,顯示出來是(null)--->常見於非集合類中

         2.[NSNull null] 表示Null 物件本身,顯示出來是<null> -------------------------->常見於集合類中

         3.NULL 和 nil,沒有實質區別,只不過前者是C語言只中的

下面詳細來講解一下三者區別

============== nil ================

 NSString *str = nil; NSData *data = nil;  NSLog(@"%@",nil); NSLog(@"%@",str);   NSLog(@"%@",data);   NSLog(@"%p",nil); NSLog(@"%p",str);   NSLog(@"%p",data);  NSLog(@"%d",(data == nil)); 2015-10-06 13:13:45.338 test[95730:5489376] (null)2015-10-06 13:13:45.338 test[95730:5489376] (null)2015-10-06 13:13:45.338 test[95730:5489376] (null)2015-10-06 13:13:45.338 test[95730:5489376] 0x02015-10-06 13:13:45.338 test[95730:5489376] 0x02015-10-06 13:13:45.338 test[95730:5489376] 0x02015-10-06 13:13:45.338 test[95730:5489376] 1

2. Null 物件在控制台列印出來是(null)

3. nil定義

// objc.h#ifndef NULL#define NULL    __DARWIN_NULL#endif /* ! NULL */#ifndef nil  #if defined(__has_feature)     #if __has_feature(cxx_nullptr)      #define nil nullptr    #else      #define nil __DARWIN_NULL    #endif  #else    #define nil __DARWIN_NULL  #endif#endif// __DARWIN_NULL in _types.h #define __DARWIN_NULL ((void *)0)

===========NULL ================

int *pointerToInt = NULL;char *pointerToChar = NULL;struct TreeNode *rootNode = NULL;NSLog(@"%@",pointerToInt);NSLog(@"%s",pointerToChar); NSLog(@"%@",rootNode);NSLog(@"%d",pointerToInt==NULL);  //NSLog(@"%d",pointerToInt==nil);   //2015-10-06 13:38:59.927 test[95925:5515192] (null)2015-10-06 13:38:59.927 test[95925:5515192] (null)2015-10-06 13:38:59.927 test[95925:5515192] (null)2015-10-06 13:38:59.927 test[95925:5515192] 12015-10-06 13:38:59.927 test[95925:5515192] 1

2. 控制台列印出來是(null)

3. 定義

#ifndef NULL#define NULL    __DARWIN_NULL#endif /* ! NULL */

===========NSNULL ================

 

 NSArray *arr = [NSArray arrayWithObjects:@"one",@"two",[NSNull null], nil];        for (NSString *str in arr) {            NSLog(@"%@",str);        }2015-10-06 16:40:25.816 test[96177:5565855] one2015-10-06 16:40:25.817 test[96177:5565855] two2015-10-06 16:40:25.817 test[96177:5565855] <null>

 4. 此時控制台列印出來的是<null>

5. 定義

/*NSNull.hCopyright (c) 1994-2015, Apple Inc. All rights reserved.*/#import <Foundation/NSObject.h>NS_ASSUME_NONNULL_BEGIN@interface NSNull : NSObject <NSCopying, NSSecureCoding>+ (NSNull *)null;@endNS_ASSUME_NONNULL_END

參考資料:http://stackoverflow.com/questions/5908936/difference-between-nil-nil-and-null-in-objective-c

            http://blog.csdn.net/shenshen123jun/article/details/38315755

             https://github.com/nicklockwood/NullSafe

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.