GVKun编程网logo

nil,NULL 和NSNull

2

对于nil,NULL和NSNull感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于failedtoparse:{"row":[8,6,12,7,13,8,14],"meta":[null,nul

对于nil,NULL 和NSNull感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8、iOS nil、NULL和NSNull 的使用、IOS 基础之nil,NULL,NSNULL区别详解、iOS 开发 nil/Nil/NULL/NSNull 的区别的有用信息。

本文目录一览:

nil,NULL 和NSNull

nil,NULL 和NSNull

nil用来给对象赋值(Objective-C中的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋 值(在Objective-C中类是一个对象,是类的meta-class的实例), 而NSNull则用于集合操作,虽然它们表示的都是空值,但使用的场合完全不同。

示例如下:
  1. id object = nil;  
  2. // 判断对象不为空  
  3. if (object) {  
  4. }  
  5.       
  6. // 判断对象为空  
  7. if (object == nil) {  
  8. }  
  9.           
  10. // 数组初始化,空值结束  
  11. NSArray *array = [[NSArray alloc] initWithObjects:@"First", @"Second", nil];  
  12.   
  13. // 判断数组元素是否为空  
  14. NSString *element = [array objectAtIndex:2];  
  15. if ((NSNull *)element == [NSNull null]) {  
  16. }  
今天做项目的时候就遇到,要判断数组元素是否为空,我的以下写法,都无效
if(!element)
if([element length]>0)
if(element== NULL)
if(element == Nil)


  1.   
  2. // 判断字典对象的元素是否为空  
  3. NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:  
  4.     @"iPhone", @"First", @"iPad", @"Second", nil];  
  5. NSString *value = [dictionary objectForKey:@"First"];  
  6. if ((NSNull *)value == [NSNull null]) {  
  7. }  
欢迎大家继续补充他们的区别。
加深理解一

1、nil:一般赋值给空对象;

2、NULL:一般赋值给nil之外的其他空值。如SEL等;

  举个栗子(好重啊~):

    [NSApp beginSheet:sheet
                modalForWindow:mainWindow

                modalDelegate:nil //pointing to an object

                didEndSelector:NULL //pointing to a non object/class

                contextInfo:NULL]; //pointing to a non object/class

3、NSNULL:NSNull只有一个方法:+ (NSNull *) null;

  [NSNull null]用来在NSArray和NSDictionary中加入非nil(表示列表结束)的空值.   [NSNull null]是一个对象,他用在不能使用nil的场合。

4、当向nil发送消息时,返回NO,不会有异常,程序将继续执行下去;

  而向NSNull的对象发送消息时会收到异常。


因为在NSArray和NSDictionary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nil值。如要确实需要存储一个表示“什么都没有”的值,可以使用NSNull类。NSNull只有一个方法:

+ (NSNull *) null;


nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。这些可以理解为nil,Nil, NULL的区别吧。



加深理解二

浅谈关于nil和 null区别及相关问题

 

 

1、nil和null从字面意思来理解比较简 单,nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,而null是将基本类型设置为空的,个人感觉有点像属性当中,基本类型分 配为assign NSString类型一般分配copy,而对象一般用retain。而且我们对于nil调用方法,不会产生crash或者抛出异常。

看一段

nil -> Null-pointer to objective- c object

NIL -> Null-pointer to objective- c class

null-> null pointer to primitive type or absence of data.

看一下用法

NSURL *url = nil;

Class  class = Nil;

int *pointerInt = NULL;

nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。这些可以理解为nil,Nil, NULL的区别吧。

2、一个可以研究一下的问题

在dealloc中

-(void) dealloc

{

self.test = nil; 

[_test release];

test = nil;

}

这几个的区别

先说最简单的  [_test release]; 这个就是将引用技术减1,所谓的引用计数就是看看有多个指针指向一块内存实体,当release一次,就是指针减少一个,release到了0的时候,就是真正把这块内存归还给系统的时候了


再说self.test = nil;说明一下 属性和setter和getter方法就不难理解了


-(void) setTest:(NSString *)newString

{

if(_test != newString)

[_test release];

_test = [newString retain];

}

-(NSString *)test

{

return  _test;

}

这个是setter和getter方法,而在这个问题中相当于刚才的代码改变为

if(_test != nil)

[_test release];

_test = nil;

现在就比较容易解释了,setter方法会 retain nil对象,在这之前已经先release了旧的对象,这个方法优点是成员变量连指向随机数据的机会都没有,而通过别的方式,就可能会出现指向随机数据的 情况。当release了之后,万一有别的方法要用要存取它,如果它已经dealloc了,可能就会crash,而指向nil之后,就不会发生错误了。 nil说白了就是计数器为0,这么说吧,当真正release一个对象的时候,NSLog是打印不了它指向的内存控件的,而当nil的时候,是可以打印出 来指向的一个内存空间。

那么现在也不难解释test = nil;  单纯的这种用法可以说是自己给自己制造内存泄露,这里可以这么理解,就是相当于将指向对象的指针直接和对象一刀两断了。直接让test指向nil,而内存实体不会消失,也不会有系统回收。

failed to parse: {

failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8

IDEA整合springboot与neo4j时出现这个问题

iOS nil、NULL和NSNull 的使用

iOS nil、NULL和NSNull 的使用

一、概念

nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。这些可以理解为nilNil NULL的区别吧。

1nil用来给对象赋值(Objective-C中的任何对象都属于id类型),nil用于类指针赋值(在Objective-C中类是一个对象,是类的meta-class的实例)。

2NULL则给任何指针赋值,NULLnil不能互换。

3、而NSNull则用于集合操作,虽然它们表示的都是空值,但使用的场合完全不同。


二、示例

id object = nil;

// 判断对象不为空

if (object)

{

    

}


// 判断对象为空

if (object == nil)

{

    

}


// 数组初始化,空值结束

NSArray *array = [[NSArray alloc] initWithObjects:@"First", @"Second", nil];


// 判断数组元素是否为空

NSString *element = [array objectAtIndex:2];

if ((NSNull *)element == [NSNull null])

{

    

}


要判断数组元素是否为空,以下的写法,都无效

if(!element)

if([element length] > 0)

if(element == NULL)

if(element == Nil)


// 判断字典对象的元素是否为空

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"iPhone", @"First", @"iPad", @"Second", nil];

NSString *value = [dictionary objectForKey:@"First"];

if ((NSNull *)value == [NSNull null])

{

    

}


三、

加深理解一

1nil:一般赋值给空对象;

2NULL:一般赋值给nil之外的其他空值,如SEL等;

示例:

[NSApp beginSheet:sheet

   modalForWindow:mainWindow

    modalDelegate:nil //pointing to an object

   didEndSelector:NULL //pointing to a non object/class

      contextInfo:NULL]; //pointing to a non object/class

3NSNULLNSNull只有一个方法:+ (NSNull *)null;

3-1[NSNull null]用来在NSArrayNSDictionary中加入非nil(表示列表结束)的空值。

3-2[NSNull null]是一个对象,他用在不能使用nil的场合(在NSArrayNSDictionarynil中有特殊的含义(表示列表结束),所以不能在集合中放入nil值。如要确实需要存储一个表示什么都没有的值,可以使用NSNull类)。

4、当向nil发送消息时,返回NO,不会有异常,程序将继续执行下去,但是向NSNull的对象发送消息时会收到异常。


加深理解二

浅谈关于nilnull区别及相关问题

1nilnull从字面意思来理解比较简单,nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,而null是将基本类型设置为空的,个人感觉有点像属性当中,基本类型分配为assign NSString类型一般分配copy,而对象一般用retain。而且我们对于nil调用方法,不会产生crash或者抛出异常。

看一段

nil -> Null-pointer to objective- c object // 一个对象

NIL -> Null-pointer to objective- c class  // 一个类

null-> null pointer to primitive type or absence of data. // 基本类型

看一下用法

NSURL *url = nil

Class class = Nil

int *pointerInt = NULL

nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。这些可以理解为nilNil NULL的区别吧。


2、一个可以研究一下的问题

dealloc

-voiddealloc

{

    self.test = nil;

    [_test release];

    test = nil;

}


这几个的区别

先说最简单的[_test release]; 这个就是将引用技术减1,所谓的引用计数就是看看有多个指针指向一块内存实体,当release一次,就是指针减少一个,release到了0的时候就是真正把这块内存归还给系统的时候了


再说self.test = nil;说明一下 属性和settergetter方法就不难理解了


-voidsetTest:(NSString *)newString

{

    if_test != newString

    {

        [_test release];

        _test = [newString retain];

    }

}


-NSString *test

{

    return  _test;

}

        

这个是settergetter方法,而在这个问题中相当于刚才的代码改变为

if_test != nil

{

    [_test release];

    _test = nil;

}

        

现在就比较容易解释了,setter方法会retain nil对象,在这之前已经先release了旧的对象,这个方法优点是成员变量连指向随机数据的机会都没有,而通过别的方式,就可能会出现指向随机数据的情况。当release了之后,万一有别的方法要用要存取它,如果它已经dealloc了,可能就会crash,而指向nil之后,就不会发生错误了。

nil说白了就是计数器0,这么说吧,当真正release一个对象的时候,NSLog是打印不了它指向的内存控件的,而当nil的时候,是可以打印出来指向的一个内存空间。

那么现在也不难解释test = nil单纯的这种用法可以说是自己给自己制造内存泄露,这里可以这么理解,就是相当于将指向对象的指针直接和对象一刀两断了。直接让test指向nil,而内存实体不会消失,也不会有系统回收。


IOS 基础之nil,NULL,NSNULL区别详解

IOS 基础之nil,NULL,NSNULL区别详解

IOS 基础之nil,NULL,NSNULL区别详解

① nil:一般赋值给空对象。

② NULL:NULL 是一个通用指针(泛型指针)。

一般赋值给 nil 之外的其他空值。如SEL等。

③ NSNULL:[NSNull null] 是一个对象,他用在不能使用 nil 的场合。

因为在 NSArray 和 NSDictionary 中 nil 有特殊的含义(表示列表结束),所以不能在集合中放入 nil 值。如要确实需要存储一个表示“什么都没有”的值,可以使用 NSNull 类。NSNull只有一个方法:

+ (NSNull *) null;

④ 当向 nil 发送消息时,返回 NO,不会有异常,程序将继续执行下去。

而向 NSNull 的对象发送消息时会收到异常。

实例:

nil 是对objective c id 对象赋空值

例如

NSString * string = [NSString stringWithFormat:@"test"];
  string = nil;

对于objective c 集合类对象 比如数组对象,字典对象,当我们不需要再使用他们的时候,对他们release 的同时最好也把他们赋值为nil,这样确保安全性,下面一个简单的一个例子:如果不赋值nil,可能导致程序崩溃

NSArray * array = [NSArray arrayWithObjects:@"test",@"test1" ,nil];
  [array release];
  
  if (array)
  {
    //仅仅对数组release,并没有赋空值的话,在程序某个地方如果继续对数组操纵,程序直接崩溃
    NSString * string = [array objectAtIndex:0];
    NSLog(@"%@",string);
  }

编程的时候对集合类对象先赋值为nil,再将其release这样可以保证程序安全性,苹果官方例子中也看到过viewDidUnload把对象赋值nil,然后在dealloc方法中将他们release,

Nil: A null pointer to an Objective-C class.表示对类进行赋空值

NULL: A null pointer to anything else,  is for C-style memory pointers. 用于对非对象指针赋空值,比如C指针

NSNull 对于像NSArray这样的类型,nil或NULL不能做为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,则可以用[NSNULL null】返回的对象来初始化NSArray中的内容

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:
  • 总结IOS中nil、Nil、NULL和NSNull区别
  • iOS中nil、Nil、NULL、NSNull详解

iOS 开发 nil/Nil/NULL/NSNull 的区别

iOS 开发 nil/Nil/NULL/NSNull 的区别

    C 用 0 来作为不存在的原始值,而 NULL 作为指针 (这在指针环境中相当于 0)。

    Objective-C 在 C 的表达不存在的基础上增加了 nil。nil 是一个指向不存在的对象指针。虽然它在语义上与 NULL 不同,但它们在技术上是相等的。

    在框架层面,Foundation 定义了 NSNull,即一个类方法 + null,它返回一个单独的 NSNull 对象。NSNull 与 nil 以及 NULL 不同,因为它是一个实际的对象,而不是一个零值。

    另外,在 Foundation/NSObjCRuntime.h 中,Nil 被定义为指向零的类指针。这个 nil 的鲜为人知的大写的表兄并不常常出现,但它至少值得注意。

    关于 nil

    刚被分配的 NSObject 的内容被设置为 0。也就是说那个对象所有的指向其他对象的指针都从 nil 开始,所以在 init 方法中设置 self.(association) = nil 之类的表达是没有必要的。

    也许 nil 最显著的行为是,它虽然为零,仍然可以有消息发送给它。

    在其他的语言中,比如 C++,这样做会使你的程序崩溃,但在 Objective-C 中,在 nil 上调用方法返回一个零值。这大大的简化了表达,因为它避免了在使用 nil 之前对它的检查:

    

// 举个例子,这个表达...
if (name != nil && [name isEqualToString:@"Steve"]) { ... }

// …可以被简化为:
if ([name isEqualToString:@"steve"]) { ... }

    关于 NSNull

    NSNull 在 Foundation 和其它框架中被广泛的使用,以解决如 NSArray 和 NSDictionary 之类的集合不能有 nil 值的缺陷。你可以将 NSNull 理解为有效的将 NULL 或者 nil 值封装 boxing,以达到在集合中使用它们的目的:

NSMutableDictionary *mDic = [[NSMutableDictionary alloc]init];
    mDic[@"someKey"] = [NSNull null];
    NSLog(@"key :%@",[mDic allKeys]);
    NSLog(@"dic :%@",mDic);

    输出:

key :(
    someKey
)
dic :{
    someKey = "<null>";
}

    总结一下:

    NULL        (void *) 0         C 指针的字面零值

    nil            (id) 0               Objective-C 对象的字面零值

    Nil           (Class) 0           Objective-C 类的字面零值

    NSNull     [NSNull null]    用来表示零值的单独的对象

 

我们今天的关于nil,NULL 和NSNull的分享就到这里,谢谢您的阅读,如果想了解更多关于failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8、iOS nil、NULL和NSNull 的使用、IOS 基础之nil,NULL,NSNULL区别详解、iOS 开发 nil/Nil/NULL/NSNull 的区别的相关信息,可以在本站进行搜索。

本文标签: