请考虑以下片段,说明方法执行期间对象破坏的问题。
-(void)handleNotification:(id)notification{
//owner has reference so this is fine
self.foo += 1;
//call back to the owner/delegate, owner may set reference to nil
[self.delegate didFinish];
//if object has been dealloc'ed, it crashes
self.bar += 1; // CRASH
}
实际上,我甚至无法重现崩溃,因为它很少发生,但我知道它存在于Crashlytics报告中。
我试图通过声明对self
:
-(void)handleNotification:(id)notification{
self.foo += 1;
MyObj *strongSelf = self;
[self.delegate didFinish];
strongSelf.bar += 1;
}
但是我不确定它是否正确(正如我所说,我无法重现它并检查崩溃是否已经消失)。
如果这个修复正确吗?这种变化是否可以保证在方法结束之前self
不会被破坏?
答案 0 :(得分:1)