我遇到了一个难以重现的奇怪崩溃。例如,在应用程序的过去35次运行中,此次崩溃发生了一次。不幸的是,我不确定重复的确切步骤。
崩溃报告显示:
SIGSEGV
Remotely-[NetworkCall handleRequestFinished]
in NetworkCall.m on Line 232
第232行是:
_startBlock = nil;
并且该属性定义为:
typedef void (^NetworkCallStartBlock)();
@property(copy, nonatomic) NetworkCallStartBlock startBlock;
有一次我能够重新调试附带调试器的bug,将_startBlock打印到控制台时显示其值在尝试分配nil时已经为nil。
有什么想法吗?
答案 0 :(得分:0)
_startBlock = nil;
更改为self.startBlock = nil
后者使你的块释放并安全地将属性设置为nil。
答案 1 :(得分:0)
JosephH上面的评论是正确的。将已经为零的值设置为nil是在self被dealloc'd之后发生的,因此它解除了引用自我的问题。这个类的dealloc
没有正确设置为nil一切,所以修复解决了这个问题。感谢所有输入并跟踪它