你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

nil null Nil NSNull

2022/5/18 0:30:03

nil: A null pointer to an Objective-C object.  ( #define nil((id)0)  )

nil 是一个对象值。

 

Nil: A null pointer to an Objective-C class.

 

NULL: A null pointer to anythingelse ( #define NULL ((void*)0)  )

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


NSNull: A class defines a singletonobject used to represent nullvalues in collection objects (which don't allow nilvalues).
[NSNull null]: The singleton instance of NSNull.

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

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

+ (NSNull *) null;

 

 

Technically they're all the same, but in practice they givesomeone reading your code some hints about what's going on; justlike naming classes with a capital letter and instances withlowercase is recommended, but not required.

If someone sees you passing NULL, they know the receiver expects aC pointer. If they see nil, they know the receiver is expecting anobject. If they see Nil, they know the receiver is expecting aclass. Readability.

example 1:

[NSApp beginSheet:sheet
            modalForWindow:mainWindow

            modalDelegate:nil //pointing to an object

            didEndSelector:NULL //pointing to a nonobject/class

            contextInfo:NULL]; //pointing to a nonobject/class



example 2: The values1 will only have obj1,
NSObject *obj1 = [NSObject new];
NSObject *obj2 = nil;
NSObject *obj3 = [NSObject new];
NSArray *values1 = [NSArrayarrayWithObjects:obj1,obj2,obj3,nil];

example 3: The values2 have 3 objects and the second object isinstance of NUSNull
NSObject *obj1 = [NSObject new];
NSObject *obj2 = [NSNull null];
NSObject *obj3 = [NSObject new];
NSArray *values2 = [NSArrayarrayWithObjects:obj1,obj2,obj3,nil];

about testing:
if obj is nil , [obj message] will return NO, withoutNSException
if obj is NSNull , [obj message] will throw a NSException
testing NSNull: (NSNull *)obj == [NSNull null]