UITableViewCell内的后台线程
我已经创建了一个自定义表格单元格,我正在其中下载后台线程在单元类中的图像,现在假设我移动到前一个视图控制器。后台线程仍然会执行并会使应用程序崩溃。我可以测试这种情况,因为图像加载速度很快,没有机会移动到以前的视图控制器。UITableViewCell内的后台线程
会有什么后果?
如果您没有正确地做到这一点,肯定会出现问题。你可能不会崩溃,因为NSURLSession通过保留它的委托来阻止你。但出于同样的原因,您留下的视图控制器将会泄漏;它不会失效,下载和其他事情将继续发生。
如果你是正确的做法,当视图控制器不存在时,所有下载应该被你取消。如果您不需要占用带宽和CPU时间的下载,则有责任拨打invalidateAndCancel
来实现这一目标。请注意,您通常不能在视图控制器的deinit
中执行此操作,这完全是因为保留周期。但是一旦你完成了它,你的视图控制器就能够顺利地存在。
感谢fir回复。我会发布代码。但那是我的问题,我需要做些什么来取消下载,否则它会自动取消,当我离开控制器。 – knowledgeseeker
而我的答案是否定的。对不起,如果不明确。这就是为什么你给了'invalidateAndCancel'。 – matt
扩大我的答案。 – matt
显示您正在使用的代码。 – Wain
你可以使用设置>开发者>网络链接调节器>非常糟糕的网络在慢速网络上测试。并且在Mac上也有一个名为“Network Link Conditioner”的工具 – hariszaman
正如Matt在他的回答中所说的那样,您当然可以编写代码来处理这种情况而不会崩溃。自己测试(使用@ hariszaman的建议,如果需要的话)以便崩溃并报告回来。如果它崩溃,请编辑您的问题以向我们显示您的代码。 –