为什么当 self 为 nil 时设置属性会崩溃?

Why does setting a property crash when self is nil?

提问人:Max 提问时间:10/26/2020 更新时间:10/26/2020 访问量:102

问:

在极少数情况下,我的应用程序在这行代码上崩溃

self.dataBuffer = nil;

该属性声明为

@property (strong, nonatomic) NSMutableData* dataBuffer;

对我来说,这条线看起来非常安全。我以为点语法只是 的简写,这里唯一可能发生的奇怪事情是 ,但是应该忽略选择器,而不是崩溃。但是,将线路包裹起来似乎可以防止崩溃。所以显然它不安全?[self setDataBuffer:nil]self == nilif (self != nil)

为什么?


如果重要的话,这实际上是在与这次崩溃相关的(非常旧版本的)库 MQTTClient 中。

iOS Objective-C 属性 null

评论

0赞 matt 10/26/2020
你能说说这个代码在哪里吗?例如,您根本不应该发送消息,因此似乎值得一问您是否有机会这样做。selfdealloc
0赞 skaak 10/26/2020
你设置它的方式不应该导致崩溃 - 你的假设是正确的。如果你超载,可能会发生奇怪的事情,但前提是不是 null 并且你会知道它。问题可能出在别的地方。setDataBufferself
2赞 matt 10/26/2020
还有人想知道我们是如何陷入我们的代码正在运行但为零的情况的。这似乎暗示了一个并发问题,我们被隐藏在自己的背后。
0赞 Phillip Mills 10/26/2020
您从 2017 年发布的图片中的崩溃在堆栈上出现,这通常是关于调用一个不存在的方法。你的崩溃是什么样子的?(错误消息、堆栈跟踪......objc_msgSend
0赞 skaak 10/26/2020
是的,我也怀疑并发访问......

答: 暂无答案