我在Objective-C中有一个模型,其变量如下:
@property (nullable, nonatomic, strong) id value;
由于泛型类型,该变量可以包含各种类型的值,包括NSString,NSNumber和Bool。
现在,由于某种原因,下面的代码:
[model.value isKindOfClass:[NSNull class]];
崩溃。崩溃中的消息就是我在标题中提到的内容。该崩溃很少能重现,但是导致我的大量用户面临崩溃(Crashlytics报告)。
有什么想法可能会发生这种情况吗?
答案 0 :(得分:1)
由于泛型类型,该变量可以包含各种类型的值,包括NSString,NSNumber和Bool。
我不知道您的意思是“由于泛型类型”。而且我也不知道您所说的布尔不是B型,而是Objective-C类型。您可能是布尔或布尔或布尔。
但是,不可能将{em> any 布尔值的布尔值分配给id
属性,因为id
是对象,而布尔值是标量。我认为这可能发生的唯一方法是,如果这是非ARC文件;在ARC下,编译器会阻止您。
一种可能性是这是一个非ARC文件,您在这里犯了一个可怕的错误,试图将id
视为可以容纳标量。
但是,让我们忽略它,因为错误表明它是model
,而不是它的value
属性,这就是问题所在。
一个更隐蔽的可能性是您遇到了线程/内存管理问题,并且model
指针悬空了,使您完全指向其他内容。您无法自己重现此事实表明存在这种情况。这样的问题很难找到,尤其是当崩溃只是诊断早些时候已经发生的问题时。