是否有可能告诉ARC忽略一个对象?

时间:2011-10-27 16:17:30

标签: objective-c xcode automatic-ref-counting

最近将现有的iPhone项目转换为使用ARC,并且部分代码停止工作并一直崩溃。似乎ARC正在自动发布myRequest

ServerRequest *myRequest = [[ServerRequest alloc] init];

过早,在一些代理职能被解雇之前。

现在我从阅读ARC了解到,您可以针对特定文件设置编译器标志-fno-objc-arc以忽略ARC。然而,现在工作正常,我仍然非常喜欢使用ARC。我想知道是否有人知道一种方法,当你实例化一个对象时,告诉ARC不管理它的释放,例如:

ServerRequest *myRequest = [[[ServerRequest alloc] init] ignoreARC];

3 个答案:

答案 0 :(得分:5)

关闭单个变量的ARC?不可能。

您可能想尝试在实例变量中保存myRequest,因此ARC知道您仍然需要它。完成后,您可以通过将其设置为nil来释放它。

答案 1 :(得分:4)

您可以使用__bridge强制转换将对象转换为void*,从而将变量移出ARC之外,但这不是您问题的解决方案。你有一个内存管理问题,你需要找到并修复它,而不是创可贴。

正如@voidStern所说,如果你有一个关心保留的请求,你需要保留它,然后在你不再关心它时释放它。

答案 2 :(得分:4)

这是一个非常糟糕的主意。 ARC正在释放该对象,因为代码的语义并不表示您希望保留它。您试图隐藏症状,而不是解决问题。

更糟糕的是,如果你设法做你想做的事,你就会让你的代码真的无法维护。有些变量是由ARC管理的,而有些变量听起来不像是花费你所有时间寻找代码的方法,试图找出哪个是哪个。

如果您创建了一个对象并希望在当前范围之外挂起它,请将其放入实例变量或将其分配给其他对象的属性。