如果对象在其方法执行完成之前被释放怎么办

Posted

技术标签:

【中文标题】如果对象在其方法执行完成之前被释放怎么办【英文标题】:What if object gets released before the completion of its method execution 【发布时间】:2012-04-25 13:38:50 【问题描述】:

我有一个 viewController,它触发一个 web 服务获取一些数据,并在解析到不同的线程后将结果存储在核心数据中..

我有很多数据,所以解析需要一些时间,并且不确定在导航中弹出 viewController 是否会停止我的解析方法的执行,

如果它在两者之间停止执行,那么我的核心数据数据库将被损坏,所以它会在释放我的 viewController 对象之前停止执行或执行选择器

MyViewController *vc = [[MyViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
[vc performSelectorInBackground:aSelector withObject:arg];

【问题讨论】:

您在使用 ARC 吗?如果没有,MyViewController 在哪里发布?它是自动发布的吗? 如果解析在不同的线程中,应该不会受到影响。如果在解析完成时有回调或通知返回到视图控制器,那可能是个问题。如果数据损坏是一个严重的问题,您还应该考虑用户按下主页按钮。 好点 Phillip,我什至没有将其视为问题,您有什么建议吗?? 【参考方案1】:

您可能会考虑将 Web 服务器交互移动到不同的对象。该对象可以处理请求/响应并将结果存储到 Core Data。这个对象也可能是一个全局对象,它有一个队列来处理请求。如果没有,那么您将需要在视图控制器释放期间处理取消请求。

您的视图控制器可以监听 Co​​re Data 的变化并采取适当的行动。

【讨论】:

并且连接的东西可以跟踪飞行中的请求计数,并在需要时进行限制。 +1 指出应该观察核心数据的变化,而不是通知或委托(糟糕!)。 你所说的“监听核心数据的变化”是什么意思,据我所知你监听 contextdidsavenotification 并采取适当的行动,还有其他方法吗?? Core Data 更改时获取通知。 Check out this SO Link

以上是关于如果对象在其方法执行完成之前被释放怎么办的主要内容,如果未能解决你的问题,请参考以下文章

无法访问已释放的对象,该怎么解决

类对象的动态分配以及释放

对象在 UIAlertView 委托被调用之前被释放

Java并发编程——锁

C#无法访问已释放的对象

销毁全局对象[关闭]