IOS中nil/Nil/NULL的区别
来源:互联网 发布:xp下查找网络打印机 编辑:程序博客网 时间:2024/05/22 08:27
一直对这三个长得很像的哥们模模糊糊,mark一下
nil在OC中的通过jump to Definition指向的定义为:
#ifndef nil
#define nil NULL
#endif /* ! nil */
说明nil和NULL是一样的。
而NULL的定义是这个样子的
#ifndef NULL
#define NULL __DARWIN_NULL
#endif /* ! NULL */
这个地方也是不知道所以然,查了查资料,NULL的解释为,A null pointer to anything else, is for C-style memory pointers.具体实现是: #define NULL ((void *)0) 。所以NULL是一种C风格的内存指针,并且为void类型,其值为0。
nil和NULL都是在MacType.h中定义。并且NULL在nil之前定义。一般来说,NULL是C风格的,而nil是属于OC风格的。
那么Nil又是什么鬼东东咧~
#ifndef Nil
#define Nil __DARWIN_NULL /* id of Nil class */
#endif
好吧,和nil是一样的,是指首字母大小写的区别,这。。。。
还有NSNull这货。。。
#import <Foundation/NSObject.h>
@interface NSNull : NSObject <NSCopying, NSCoding>
+ (NSNull *)null;
@end
从定义可以看出:NSNull是一个类,其含有一个类方法null,返回值为NSNull*。NSNull的实现采用单例设计模式。所以[NSNull null]返回一个NSNull实例。定义NSNull是由于集合对象中不能有nil值,所以用NSNull类来代表在集合对象中的null 值。英文解释:NSNull is a class defines a singleton object used to represent null values in collection objects (which don't allow nil values).
[NSNull null]: The singleton instance of NSNull.
总结:从技术实现上来说,nil、NULL都是一样的。但是实际上这种定义能够增加代码的可读性。如果你给某人传递NULL值,那么某人就认为接收到的是C指针。如果是nil,那么认为接受的是一个对象。而Nil,则认为接受的是class。
那么NSNull与nil之间的区别有哪些呢?
如何一个对象obj是nil,那么调用[obj message]将不会扔出NSException异常,并且会正常返回NO;
如果一个对象obj为NSNull,那么[obj message]将会扔出NSException异常。
- IOS中nil/Nil/NULL的区别
- iOS中nil,Nil,NULL的区别
- ios中NULL nil Nil的区别
- iOS中nil/Nil/NULL的区别以及[NSNull null]
- iOS中nil 、NULL、 Nil 、NULL的区别
- iOS中nil、Nil、NULL、NSNull 区别
- ios中null nil Nil NSNull的区别
- iOS中nil 、NULL、 Nil 、NSNull的区别
- 浅谈iOS 中 nil、Nil、null以及NSNull的区别
- iOS中nil 、NULL、 Nil 、NSNull的区别
- IOS中nil、Null、Nil和NSNull的区别
- iOS中nil 、NULL、 Nil 、NSNull的区别详谈
- iOS中nil 、NULL、 Nil 、NSNull的区别
- iOS中nil,Nil,NULL,NSNull的区别
- iOS中nil 、NULL、 Nil 、NSNull的区别
- iOS中nil/Nil/NULL/NSNull的区别
- ios 中NULL,nil, Nil, NSNull的区别
- iOS中nil ,NULL,Nil ,NSNull的区别
- bnm,
- sdfg,.
- 快慢指针在算法题上的应用
- 两个整数变量的值互换!
- 安装Oracle 11g+warehouse
- IOS中nil/Nil/NULL的区别
- 十一国庆节美丽日记365优惠大放送促销活动开始啦!
- linux的常见帮助命令和用户管理命令
- 认识WRK
- android-修改TextView中部分文字的颜色
- Delphi, Firebird, IBObjects and Transaction Management
- GPG error : signatures were invalid: NODATA1 NODATA2
- Errors running builder 'DeploymentBuilder' on project
- Appium创建一个Note的实例