NSNULL nil NULL Nil
来源:互联网 发布:长春软件开发公司 编辑:程序博客网 时间:2024/04/27 06:46
NSNULL,NULL和nil在本质上应该是一样的,NULL和nil其实就是0,但是在Objective-c中,对于像NSArray这样的类型,nil或NULL不能做为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,则可以用[NSNULL null返回的对对象来初始化NSArray中的内容,我的感觉有点像C语言中malloc一个内存空间,然后用memset初始化这段空间里的值为0。
nil: A null pointer to an Objective-C object.
( #define nil ((id)0) )
Nil: A null pointer to an Objective-C class.
NULL: A null pointer to anything else, is for C-style memory pointers.
( #define NULL ((void *)0) )
NSNull: 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.
Technically they're all the same,,, but in practice they give someone reading your code some hints about what's going on; just like naming classes with a capital letter and instances with lowercase is recommended, but not required.
If someone sees you passing NULL, they know the receiver expects a C pointer. If they see nil, they know the receiver is expecting an object. If they see Nil, they know the receiver is expecting a class. Readability.
if obj is nil , [obj message] will return NO, without NSException
if obj is NSNull , [obj message will throw a NSException
Demo1:
[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
Demo2:
NSObject *obj1;
if (obj1 != nil) {
NSLog(@"object is not nil");
}else
{
NSLog(@"object is nil");
}
testClass *c1;
if (c1 != Nil) {
NSLog(@"class is not Nil");
}else
{
NSLog(@"class is Nil");
}
int *money;
if (money != NULL) {
NSLog(@"money is not NULL");
}else
{
NSLog(@"money is NULL");
}
Demo3:
NSObject *obj1 = [[NSObject alloc] init];
NSObject *obj2 = [NSNull null];
NSObject *obj3 = [NSObject new];
NSObject *obj4;
NSArray *arr1 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];
NSLog(@"arr1 count: %ld", [arr1 count]); //arr1 count: 3
NSObject *obj1;
NSObject *obj2 = [[NSObject alloc] init];
NSObject *obj3 = [NSNull null];
NSObject *obj4 = [NSObject new];
NSArray *arr2 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];
NSLog(@"arr2 count: %ld", [arr2 count]); //arr2 count: 0
Demo4:
//有异常!
NSObject *obj1 = [NSNull null];
NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1, @"three" ,nil];
for (NSString *str in arr1) {
NSLog(@"array object: %@", [str lowercaseString]);
}
//修改
NSObject *obj1 = [NSNull null];
NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1, @"three" ,nil];
for (NSString *str in arr1) {
if (str != [NSNull null]){
NSLog(@"array object: %@", [str lowercaseString]);
}
}
- nil Nil NULL NSNull
- NSNULL nil NULL Nil
- nil Nil NULL NSNull
- nil / Nil / NULL / NSNull
- nil / Nil / NULL / NSNull
- nil / Nil / NULL / NSNull
- nil Nil NULL NSNull
- nil/Nil/NULL/NSNull
- nil/Nil/NULL/NSNull
- nil/Nil/NULL/NSNull
- nil/Nil/NULL/NSNull
- nil / Nil / NULL / NSNull
- nil、Nil、NULL、NSNull
- nil / Nil / NULL / NSNull
- nil / Nil / NULL / NSNull
- nil、Nil、NULL、NSNull
- nil / Nil / NULL / NSNull
- nil / Nil / NULL / NSNull
- 配置git 通过git://协议进行只读访问, 以及配置本地访问 ,以及通过http 访问
- Android Socket编程开发入门
- WCF Message Size Quotas
- 困扰我很久的左值和右值
- java调应用程序网址或者文档
- NSNULL nil NULL Nil
- MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
- 设置myeclipse编辑器中字体样式
- 我的理想
- 实习运维女的成长过程——Linux入门
- APK反编译流程
- 二级指针使用注意点
- the currently displayed page contains invalid values 解决方法
- Google Map for Android更新 支持高清显示