过渡到ARC导致委托问题

在将项目转换到ARC之后,我一直在委托方法上没有被调用/被调用的问题。 我意识到,问题是我有一个variables被分配,然后执行一个asynchronous任务。 举一个简单的例子,假设有一个名为MyService的对象响应委托方法executeDidSucceed:

- (void)fireRequest { MyService *service = [[MyService alloc] initWithDelegate:self]; [service execute]; } 

原来的代码看起来像这样:

 - (void)fireRequest { MyService *service = [[[MyService alloc] initWithDelegate:self] autorelease]; [service execute]; } 

使用ARC,我明白在调用[service execute]之后会添加一个release调用。 而且我也明白,因为这个方法是asynchronous的, service对象将被释放,并且将为委托方法调用解除分配的对象。

我知道一个解决办法就是把service变成一个实例variables,并给它strong属性,这样我们就可以保留它的所有权。 我知道一个解决scheme,我们可以创build一个块,并使用一个完成处理程序,这样委托保持保留,直到块完成。 我的问题是,处理这种情况的最好办法是什么? 或者更多,在过渡到ARC时解决这个问题的“最佳实践”是什么?

您将需要使您的Myservice对象成为此类的成员。 一旦这个function完成,ARC就会清理它,因为你不再提及它。

也是我认为它是一个很好的做法,因为除非它调用委托(如果有),否则您没有对该对象的引用,并且根据情况,您可能需要在服务完成之前停止服务。