我有一个关于使用回调块在给定的堆栈帧中释放控制器的一般问题。这目前正在按照要求工作,并且控制器正在获得一个dealloc
消息并且没有其他明显的问题。这对于显示瞬态弹出窗口,对话框和其他视图(在主机类中不维护ivars或其他状态)很有用(在我看来)。如果控制器的xib设置为在关闭时释放,则会变得非常干净。我可以使用自己的回调块在方法中释放控制器吗?
这是一般模式:
- (void)showTransientView
{
MyCustomController *controller = nil;
void(^completeBlock)(ResponseCodeType) = ^(ResponseCodeType response){
if (response == ResponseOk){
[self transientViewDidEnd:controller];
}
[controller autorelease]; //project is not using ARC
};
controller = [[MyCustomController alloc] initWithCallback:completeBlock];
}
我的问题是基本上都是有隐藏的问题或其他在这里的反对,我不考虑?
另外,除了明显移除[controller autorelease]
之外,在打开ARC时该如何更改?
,在将其他任何东西转换为ARC之前,你需要做的第一件事情就是要做。 – gnasher729
@ gnasher729,它是一个非常大的(旧)代码库,我们正在研究这个代码库,但是希望在完成之前的几个地方使用这种模式。我想确保这个策略对ARC很友好,这就是为什么我这样构建第二个问题的原因。 –
你说“这是_general_模式”。你可以验证'controller'是否实际上是一个局部变量?这对于转换为ARC的问题至关重要。 –