在方法

时间:2017-10-31 11:13:58

标签: objective-c automatic-ref-counting

请考虑以下片段,说明方法执行期间对象破坏的问题。

-(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不会被破坏?

1 个答案:

答案 0 :(得分:1)

我不认为提供这样的参考是一个好主意/实践,它会影响您的应用程序的性能。

More info here

此外,我猜你的方法的调用者是NSNotificationCenter并且它不会保留观察者。