Bir*_*chi 165 null objective-c nsnull
这是示例代码:
NSDictionary *myDictionary = [NSDictionary dictionary];
NSNumber *myNumber = [myDictionary valueForKey: @"MyNumber"];
NSLog(@"myNumber = %@", myNumber); // output myNumber = (null)
if (myNumber == nil)
    NSLog(@"test 1 myNumber == nil");
if (myNumber == NULL)
    NSLog(@"test 2 myNumber == NULL");
if ([myNumber isEqual:[NSNull null]])
    NSLog(@"test 3 myNumber == [NSNull null]");
我什么时候应该使用nil,NULL和[NSNull null]?
NSR*_*der 307
他们的类型不同.它们都是零,但它NULL是一个void *,nil是一个id,并且Nil是一个类指针.
Ale*_*lex 108
您可以nil在任何可以使用的地方使用null.主要区别在于您可以发送消息nil,因此您可以在某些null无法工作的地方使用它.
一般来说,只需使用nil.
Sha*_*had 27
nil是与对象绑定/对应的空值(Objective-C中的id类型).无有没有参考/地址,只是一个空值.
NSString *str = nil;
如果我们处理一个对象,那么应该使用nil.
if(str==nil)
    NSLog("str is empty");
现在,NULL用于Objective-C中的非对象指针(如C指针).像nil一样,NULL没有值也没有地址.
char *myChar = NULL;
struct MyStruct *dStruct = NULL;
所以,如果有某种情况,当我需要检查我的struct(结构类型变量)是否为空时,我将使用:
if (dStruct == NULL)
    NSLog("The struct is empty");
让我们有另一个例子,
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
在键值观察中,上下文应该是C指针或对象引用.在这里我们不能使用nil ; 我们必须使用NULL.
最后,NSNull类定义了一个单独的对象,用于表示集合对象中的空值(NSArray,NSDictionary).在[NSNull空]会返回NSNull的单一实例.基本上[NSNull null]是一个合适的对象.
无法将nil对象插入集合类型对象.我们举个例子:
NSMutableArray *check = [[NSMutableArray alloc] init];
[check addObject:[NSNull null]];
[check addObject:nil];
在第二行,我们不会得到任何错误,因为将NSNull对象插入集合类型对象是完全公平的.在第三行,我们将得到"对象不能为零"的错误.因为nil不是一个对象.
Chu*_*uck 19
NULL和nil彼此相等,但是nil是对象值,而NULL是通用指针值((void*)0具体而言).[NSNull null]是一个在不允许nil的情况下意味着零的对象.例如,NSArray中不能有nil值.所以,如果你需要代表一个"零",你可以使用[NSNull null].
小智 12
我发现了以下内容:
objc.h
#define Nil __DARWIN_NULL   /* id of Nil class */
#define nil __DARWIN_NULL   /* id of Nil instance */
_types.h
#define __DARWIN_NULL ((void *)0)
STDDEF.H
#undef NULL
#ifdef __cplusplus
#undef __null  // VC++ hack.
#define NULL __null
#else
#define NULL ((void*)0)
#endif
MacTypes.h
#ifndef NULL
#define NULL    __DARWIN_NULL
#endif /* ! NULL */
#ifndef nil
    #define nil NULL
#endif /* ! nil */
它看起来的方式,没有区别,只有概念.
它们都只是类型为零.从功能上讲,它们之间没有区别.即,
#define NULL ((void*)0)
#define nil ((id)0)
有一点不同,但只有你自己和其他阅读代码的人,编译器并不关心.
还有一件事是nil是一个对象值,而NULL是一个通用的指针值.
扩展来自@cobbal的评论:
MacTypes.h包含:
#ifndef nil
   #define nil NULL
#endif
在现代OS X和iOS SDK中:
nil和Nil和NULL在Objective-C和C ++ 11之前的Objective-C ++中相同。nil和Nil和std::nullptr在带有C ++ 11的Objective-C ++中相同。从风格上讲,许多人喜欢将其nil用于Objective-C对象和/ NULL或nullptr其他指针类型。我自己现在nil到处使用。
[NSNull null]是单例对象,用于在nil被禁止作为值的情况下表示空值(通常在诸如NSArrayor   的集合对象中NSDictionary)。数字和值编程主题:使用NSNull
| 归档时间: | 
 | 
| 查看次数: | 112935 次 | 
| 最近记录: |