mon*_*age 14 iphone objective-c
我尝试了多种方法.我知道字典是NULL,因为当我在那里打破时控制台也打印出来.然而,当我把它放在if()中时它不会触发.
([myDict count] == 0) //results in crash
(myDict == NULL)
[myDict isEqual:[NSNull null]]
Mac*_*ade 34
看起来你有一个悬垂或狂野的指针.
您可以将Objective-C对象视为结构的指针.
然后,您可以将它们NULL与其他指针或其他指针进行比较.
所以:
( myDict == NULL )
和
( myDict == [ NSNull null ] )
都是有效的.
第一个将检查指针是否是NULL.NULL通常定义为void *值为0. 
注意,对于Objective-C对象,我们通常使用nil.nil也被定义为a void *值为0,所以它等于NULL.它就在这里表示NULL指向对象的指针,而不是标准指针.
第二个比较myDict了NSNull该类的单例实例的地址.所以你在这里比较两个指针值.
所以要快速恢复:
NULL == nil == Nil == 0
这[ NSNull null ]是一个有效的实例:
NULL != [ NSNull null ]
现在关于这个:
( [ myDict count ] == 0 )
如果你有一个野指针可能会崩溃:
NSDictionary * myDict;
[ myDict count ];
除非使用ARC,否则它肯定会崩溃,因为myDict变量尚未初始化,实际上可能指向任何东西.
如果你有一个悬空指针,它也可能崩溃:
NSDictionary * myDict;
myDict = [ [ NSDictionary alloc ] init ];
[ myDict release ];
[ myDict count ];
然后,您将尝试向已释放的对象发送消息.
向nil/ 发送消息NULL始终在Objective-C中有效.
因此,这取决于您是否要检查字典是否nil,或者它是否没有值(因为有效的字典实例可能为空).
在第一种情况下,与之比较nil.否则,检查count是否为0,并确保实例仍然有效.也许你只是忘了保留某个地方.
if (TheDict == (NSDictionary*) [NSNull null]){
//TheDict is null
    }
else{
//TheDict is not null
}
| 归档时间: | 
 | 
| 查看次数: | 24779 次 | 
| 最近记录: |