Objective c 测试对象类是否为nil的最佳方法?

Objective c 测试对象类是否为nil的最佳方法?,objective-c,Objective C,在目标C中,更好的方法是什么: if ([response class] == [nil class]) 响应是NSDictionary或NSMutableDictionary 代码正在工作,但我收到一条警告消息:“无效的接收器类型'void*”或“不同的Objective-C类型'Class'和'struct NSMutableDictionary*'的比较缺少强制转换”警告消息 谢谢如果您实际上想测试[response class],而不是response本身的值,那么您需要使用 if (

在目标C中,更好的方法是什么:

if ([response class] == [nil class])
响应是NSDictionary或NSMutableDictionary

代码正在工作,但我收到一条
警告消息:“无效的接收器类型'void*”或“不同的Objective-C类型'Class'和'struct NSMutableDictionary*'的比较缺少强制转换”
警告消息


谢谢

如果您实际上想测试
[response class]
,而不是
response
本身的值,那么您需要使用

if ([response isKindOfClass:[NSNull class])

如果您想检查
响应
本身是否为
nil
,我在一个类似的问题中描述了一种很好的方法。

对象的类不能
nil
,除非您在运行时进行了错误的切换。所有有效对象都必须是有效类的实例。您是否尝试执行类似的操作下面是什么

 if (!response) {
    // 'response' is nil
 } else if ([response isKindOfClass:[NSMutableDictionary class]]) {
    // response is an NSMutableDictionary
 } else if ([response isKindOfClass:[NSDictionary class]]) {
    // response is an NSDictionary
    // (or an NSMutableDictionary if you remove the above 'if')
 }
因为您提到了NSDictionary或NSMutableDictionary,并且似乎正在测试实例类型

isKindOfClass:
将标识接收方是否是指定类的实例。这包括子类

请注意,您不能使用它来确定字典是可变的还是不可变的,因为字典是属于`NSMutableDictionary子类的
NSCFDictionary
的实例


这是故意的。

类的
isa
的东西都是正确的。其余的都不起作用;所有字典都是NSCFDictionary(或其他私有类)的一个实例,是NSMutableDictionary的子类。没有办法区分可变字典和不可变字典(非常故意的)有趣。我可以想象在某些情况下,这是一个PITA。与以可变性和不可变性为条件的代码相比,PITA要少得多;这意味着大量的
[NSDictionary Dictionary WithDictionary:mutableDict]
效率低下。首先,我需要检查响应本身是否为零。谢谢