iOS中nil 、NULL、 Nil 、NSNull】的更多相关文章

nil用来给对象赋值(Object-C的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在Object-C中类是一个对象,是类的meta-class的实例),而NSNull则用于集合操作,虽然它们表示的都是空值,但是使用场合完全不同,所以在编码时严格按照变量类型来赋值,将正确的空值赋给正确的类型,使代码易于阅读和维护,也不易引起错误.   1.oc最好 用nil   [ nil  任意方法],不会崩溃  nil 是一个对象值. NULL是一个通…
今天查看Nullability and Objective-C发现里面提到了nil和Null等关键字,做一下笔记. nil  ->   Null-Pointer to Objective-C Object.(备注:Swift中的nil和Objective-C中的nil并不相同,Swift设定nil为一个确定的值,表示缺失,任何类型都可以设置为nil) Nil  ->  Null-Pointer to Objective-C class. null ->  Null-Pointer to…
在OC中可能经常会遇到 nil,Nil,NULL和NSNull,下面分析一下之间的区别: Symbol Value Meaning NULL (void *)0 literal null value for C pointers nil (id)0 literal null value for Objective-C objects Nil (Class)0 literal null value for Objective-C classes NSNull [NSNull null] singl…
YYModel源码中有一句:kCFNull //解析model属性并附值 + (instancetype)yy_modelWithDictionary:(NSDictionary *)dictionary { if (!dictionary || dictionary == (id)kCFNull) return nil; if (![dictionary isKindOfClass:[NSDictionary class]]) return nil; Class cls = [self cla…
关于这个问题看过两三次了,但是每次过两个月脑袋里又会不清晰,索性记录一下加深一下印象. 一.nil 当一个对象置为nil时,这个对象的内存地址就会被系统收回.置空之后是不能进行retain,copy等跟引用计数有关的任何操作的. 比如: NSMutableArray * array = [NSMutableArray array]; NSDictionary * dic = [NSDictionary dictionary]; id object = nil; [array addObject:…
ObjC 里面的几个空值符号经常会差点把我搞死,这些基础的东西一点要弄清楚才行,以提高码农的基本素质. nil nil 是 ObjC 对象的字面空值,对应 id 类型的对象,或者使用 @interface 声明的 ObjC 对象.例如: NSString *someString = nil; NSURL *someURL = nil; id someObject = nil; if (anotherObject == nil) // do something 定义: // objc.h #ifn…
nil NULL NSNULL的区别主要以下几点 1.nil:一般赋值给空对象 2.NLL:一般赋值给nil之外的其他空值.入SEL等. 3.NSULL:NSNULL只有一种方法+ (NSNull *) null; [NSNull null]用来在NSArray和NSDictionary中加入非nil(表示列表结束)的空值 4.注意:当想ni发送信息的时候,返回NO,不会有异常,程序可以继续执行下去:而向NSNULL对象发送消息的时候会收到异常 nil: A null pointer to an…
类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性)和动态属性(方法). 对象是类的一个实例,是一个具体的事物. 类与对象是抽象与具体的关系. 类其实就是一种数据类型,它的变量就是对象. nil.Nil.NULL.NSNull的区别 nil:指向一个对象的空指针 Nil:指向一个类的空指针 NULL:指向其他类型(如:基本类型.C类型)的空指针 NSNull:通常表示集合中的空值 举例: NSURL *url = nil; Class class = Nil…
nil,定义一个空的实例,指向OC中对象的空指针. 示例代码: NSString *someString = nil; NSURL *someURL = nil; id someObject = nil; if (anotherObject == nil) // do something 用法讲解: 当对某个对象release 的同时最好把他们赋值为nil,这样可以确保安全性,如果不赋值nil,可能导致程序 崩溃. NSArray * array = [NSArray arrayWithObje…
本文由我们团队的 康祖彬 童鞋撰写,这是他的个人主页:https://kangzubin.cn. 理解"不存在"的概念不仅仅是一个哲学的问题,也是一个实际的问题.我们是有形宇宙的居民,而原因在于逻辑宇宙的存在不确定性.作为一个逻辑系统的物理体现,计算机面临一个棘手的问题,就是如何用"存在"表达"不存在".--摘自 NSHipster 这段话读起来怪怪的,毕竟是翻译过来的,大概意思是说在计算机中如何描述"不存在"这个概念很重要.…
周末与一个老朋友吃饭聊天,因为他正在培训班学习iOS开发,就随便聊了几句,发现自己OC基础上的欠缺和一些知识点的混淆.特此整理如下. 1.空指针 没有存储任何内存地址的指针就称为空指针(NULL指针) 空指针就是没有被具体初始化之前,其值为0的指针 来两个例子 Person *p1 = nil; Person *p2 = NULL; 下边会给出nil和NULL的区别 2.野指针 “野指针”不是空指针,野指针是指向了一块不可用的内存地址的指针,也就是说,野指针内是有保存一个内存地址的值,但是,指向…
kenyo网友的原创说法是:做IOS开发的估计都对Objective-C的内存管理机制很头疼,一不小心程序就会出内存泄露,我也不例外,前几天被指针的置nil与release给搞惨了,今和大家详细解说一下有关Objective-C中nil与release的区别与用法. 首先说一下他们两的作用,nil就是把一个对象的指针置为空,只是切断了指针与内存中对象的联系,它对内存的释放没有什么作用:而release才是真正用于内存释放的,release后系统会将该块内存标记为可用(可重新分配).所以nil并没…
今天做项目时,在数组里面取值时,发现里面有NSNull的对象,然后用数组里面对应的对象赋值时出现各种问题,总是报错.后面经过研究和查资料,总算解决了这一问题. nil用来给对象赋值(Objective-C中的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在Objective-C中类是一个对象,是类的meta-class的实例), 而NSNull则用于集合操作,虽然它们表示的都是空值,但使用的场合完全不同. 1.nil:一般赋值给空对象: 2.…
Objective-C中nil.Nil.NULL.NSNull的区别 1.定义: nil:      OC语言定义:#define nil __DARWIN_NULL   /  #define __DARWIN_NULL ((void *)0) Nil:      OC语言定义:#define nil __DARWIN_NULL   /  #define __DARWIN_NULL ((void *)0) NULL:  C语言定义: #define NULL ((void*)0) NSNull:…
1.oc最好 用nil   [ nil  任意方法],不会崩溃 nil 是一个对象值.NULL是一个通用指针(泛型指针). 2. NSNULL,NULL和nil在本质上应该是一样的,NULL和nil其实就是0,但是在Objective-c中,   对于像NSArray这样的类型,nil或NULL不能做为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,   则可以用[NSNULL null返回的对对象来初始化NSArray中的内容,3.因为在NSArr…
nil用来给对象赋值(Objective-C中的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在Objective-C中类是一个对象,是类的meta-class的实例), 而NSNull则用于集合操作,虽然它们表示的都是空值,但使用的场合完全不同. 示例如下: id object = nil; // 判断对象不为空 if (object) { } // 判断对象为空 if (object == nil) { } // 数组初始化,空值结束 N…
  摘要: 你有没有过这样的经历,就是界面上显示出类似<null>.(null)这样一些东西,有时候还会莫名其妙的闪退.反反复复真是曰了犬,今天来总结一下这个问题的解决方法 前段时间开发过程中,界面上莫名其妙的有些地方显示(null)有些地方显示 <null>,修改起来很蛋疼,经过查找资料来总结一下其中的微妙,免得以后再在这个东西上花无谓的时间去修改. 首先记录一下我遇到这类问题的解题思路,最简单直接的方法是:首先定位到出问题的位置,然后用暴力方式把这个变量打印出来! 打印分两种:…
nil:指向OC中对象的空指针 e.g.: NSString *string = nil; Nil:指向OC中类的空指针    e.g.:Class class = Nil; NULL:指向其他类型的空指针 e.g.:int a = NULL; NSNull:OC中的对象,表示空值; 注:nil是一个对象,NULL是一个值 nil是将对象设置为空,NULL是将基本类型设置为空 e.g. (1) class *object = nil;  [object message];  result:NO…
转自:http://nshipster.cn/nil/ 理解"不存在"的概念不仅仅是一个哲学的问题,也是一个实际的问题.我们是有形宇宙的居民,而原因在于逻辑宇宙的存在不确定性.作为一个逻辑系统的物理体现,电脑面临一个棘手的问题,就是如何用存在表达不存在. 在Objective-C中,有几个不同种类的不存在.这样做的原因要追溯到一个频繁提及的NSHipster,讲解Objective-C如何在C的程序范例以及由Smalltalk启发的面向对象的范例中架起桥梁的. C用0来作为不存在的原始…
nil (id)0 是OC对象的空指针,可正常调用方法(返回空值,false,零值等) Nil  (Class)0 是OC类的空指针,主要运用于runtime中,Class c = Nil; 其他特性与nil一致 NULL  (void *)0 是C指针的空值,在OC中对非对象指针赋空值,如C指针,int *p = NULL NSNULL [NSNULL null] 是OC中的空对象,可补足NSArray,NSDictinory中不能存储nil的缺陷,在命令行输出一般为"null"…
问题是这样的. NSDictionary *sample = [NSJSONSerialization JSONObjectWithData:received options:NSJSONReadingMutableLeaves error:&error]; NSString *messageInfo = [sample objectForKey:@"message"]; sample是一个字典,messsageInfo是从字典中根据key值取得的,然后通过log可以知道mes…
nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空.这些可以理解为nil,Nil, NULL的区别吧. iOS剪切板 UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; pasteboard.string = @"要赋给剪切板的字符串"; 1 ID 可以传递任何消息给id,但如果该id不支持这个消息就会返回一个运行时异常,通常就是:“unrecognisedselector sent to…
nil:指向oc中对象的空指针 Nil:指向oc中类的空指针 NULL:指向其他类型的空指针,如一个c类型的内存指针 NSNull:在集合对象中,表示空值的对象 若obj为nil:[obj message]将返回NO,而不是NSException 若obj为NSNull:[obj message]将抛出异常NSException 下面是官方文档的解释: nil Defines the id of a null instance. Available in iOS 4.0 and later. N…
nil/Nil/NULL/NSNull的区别 一个简单的小例子: NSObject *obj = nil; NSLog(@"%@",obj); =>null NSObject *obj2 = [obj mutableCopy]; NSLog(@"%@",obj2); =>null NSMutableArray *array = [[NSMutableArray alloc] init]; [array addObject:obj]; =>crash…
nil:指向一个对象的空指针,对objective c id 对象赋空值. Nil:指向一个类的空指针,表示对类进行赋空值. NULL:指向其他类型(如:基本类型.C类型)的空指针, 用于对非对象指针赋空值. NSNull:在集合对象中,表示空值的对象. 1.nil 在指向一个对象的指针为空 定义如下: #ifndef nil # if __has_feature(cxx_nullptr) # define nil nullptr # else # define nil __DARWIN_NUL…
 id id是指向Objective-C对象的指针,等价于C语言中的void*,可以映射任何对象指针指向他,或者映射它指向其他的对象.常见的id类型就是类的delegate属性. SEL SEL类型是Objective-C用来定义方法的关键字,但却从不属于任何类实例,其值是通过@selector进行计算,可以把她当做一个函数指针来使用,但实际上的类型是const char*.SEL类系可以在编译时通过@selector()直接创建,也可以用NSSelectorFromString()函数创建,这…
空指针1.空指针指不含有任何内存地址的指针.在没有具体初始化之前,其被符值为0Dog * dog = nil;Dog * dog = NULL;都为空指针2.野指针指指向的内存为垃圾内存,导致其值不确定.野指针的危害程度远远大于空指针.因为当一个指针所指向的对象为空时,如果扔向该对象发送消息时,程序就会崩溃.所以一点要在完全释放对象后将指针复制为nil.一面出现野指针的问题.但是空指针是可以被发送消息的 nil.Nil.NULL.NSNull一直了解,但是一直忘,所以今天总结下.我的理解中他们重…
http://blog.sina.com.cn/s/blog_4930f8e60101h71b.html 其实早就想研究一下nil.Nil.NULL和NSNull之间的区别,只是工作上除了nil,其它的几乎少有用到,所以一直拖到今天.有时候感觉自己越来越浮躁,对细微处的知识理解不够深入,因此这里给自己提个醒--在以后的工作当中要始终保持一种钻研的精神! 言归正传,我们来分别介绍一下这四种类型: 一.nil 我们给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉: 或者对象由…
一.nil 我们给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉: 或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统将这块内存释放掉,这个时候这个对象为nil,称其为“空对象”.(注意:注意空对象与值为空的对象是不同的) 所以对于这种空对象,所有关于retain的操作都会引起程序崩溃,例如字典添加键值或数组添加新原素等. 二.Nil nil和Nil在使用上是没有严格限定的,也就是说凡是使用nil的地方都可以用Nil来代替,反之亦然.只不过从编程…