【发布时间】:2011-10-23 20:47:42
【问题描述】:
我在我的应用程序中使用以下模式并正在过渡到 ARC。基本上,一个对象保留一个控制器的实例,并在通过委托协议通知它已完成时释放该控制器。我不使用 iVar/property b/c startProcess 可以调用 N 次来处理 N 件事。
下面的例子:
// start a process in a controller
- (void)startProcess
{
MyController *controller = [[MyController alloc] init];
// set the delegate, the delegate is defined as (nonatomic, assign)
controller.delegate = self;
[controller start];
}
// when the delegate is notified, release the controller
- (void)myControllerDidFinish:(MyController):controller
{
// do something with results
[controller release];
}
当上述实现转换为ARC时,控制器在startProcess结束后不再保留,因此不会进行处理,也永远不会收到委托消息。
问题:将我的项目转换为使用 ARC 时,如何修改上述实现以在不在实例化控制器的对象中创建 iVar 的情况下正常工作? Apple 的文档中有一个类似的示例来过渡到 ARC,但它涉及使用块。我宁愿不要用完成块替换委托协议。
编辑:在代码中添加了关于如何定义委托的注释
编辑:澄清第一段以解释为什么持有控制器的 iVar/属性不起作用
【问题讨论】:
标签: objective-c ios xcode4.2 automatic-ref-counting