0

我正在对一个对象执行异步方法,当我的请求完成时,我将结果打印在标签中。我的问题是:如果我启动我的请求然后删除我的对象,我的 setText 方法会崩溃(因为我的对象已被释放)。

即使我的对象已被释放,我怎样才能避免这种崩溃?

有什么测试要做吗?

4

4 回答 4

1

1)在请求完成之前不要删除您的对象:)

2) 取消请求(根据您的对象并不总是可行)

于 2012-08-10T11:11:07.620 回答
0

如果您的对象被释放并且它当前是视图上的子视图,则视图本身已被销毁,您将无处显示标签内容。为什么会这样取决于你的应用程序的设计,但通常你的代码可以检测到视图的删除,如果你知道它已经消失,你应该将任何对视图的引用设置为 nil。

如果标签尚未添加到视图中 - 那么您需要保留标签,以便您可以在其上设置文本并在包含视图上调用 addSubview。

此外,如果用户操作会导致视图被删除 - 显示一个微调器并阻止用户这样做,因为他们调用的请求正在进行中。

于 2012-08-10T12:39:47.903 回答
0

解决方案是在“init”或“viewDidLoad”方法中创建一个 NSMutableArray 对象。当您想要移除对象时,请务必在将其从父视图中移除后将其放入此数组中。然后在您的异步方法中(最好在主线程上运行以打印结果),它做的最后一件事是 [storageArray removeObject:object],释放它。

于 2012-08-10T12:24:35.450 回答
0

异步请求可以保留对象,直到它完成。

于 2012-08-10T21:08:27.010 回答