我正在对象上执行异步方法,当我的请求完成时,我将结果打印在标签中。我的问题是:如果我启动我的请求,然后删除我的对象,我的setText方法崩溃(因为我的对象被释放)。
即使我的对象已被释放,如何避免此崩溃?
有没有可以做的测试?
答案 0 :(得分:1)
1)在请求完成之前不要删除您的对象:)
2)取消请求(根据您的对象不一定可能)
答案 1 :(得分:0)
解决方案是在“init”或“viewDidLoad”方法中创建一个NSMutableArray对象。如果要删除对象,请在将其从超级视图中删除后将其放在此数组中。然后在你的异步方法中(最好在主线程上运行以打印结果),它最后做的是[storageArray removeObject:object],以释放它。
答案 2 :(得分:0)
如果您的对象已取消分配并且其当前是视图上的子视图,则视图本身已被破坏,您无处可显示标签内容。为什么这将取决于您的应用程序的设计,但通常您的代码可以检测到视图的删除,如果您知道它已消失,您应该将视图的任何引用设置为nil。
如果标签尚未添加到视图中 - 那么您需要保留标签,以便您可以在其上设置文本并在包含视图上调用addSubview。
此外,如果用户操作导致视图被删除 - 显示一个微调器并阻止用户执行此操作,因为他们调用的请求正在进行中。
答案 3 :(得分:0)
异步请求可以保留对象,直到完成它为止。