1

我有一个问题,假设 A 和 B 是从 A 用户推送到 B 视图控制器的 2 个视图控制器,在 B 中,用户通过创建对象 C(这是 NSObject 类)开始一些下载并将 B 设置为 C(分配)的委托,现在用户想回到A然后B的dealloc调用对象释放,C委托无法回叫(崩溃)。我想得到调用并允许用户移动到其他视图控制器,这样我就可以在C类中保留委托但是保留代表是错误的......

what are all solutions ...

提前致谢。

4

2 回答 2

0

我看到两个选项:

  1. 您不需要下载的数据。解决方案:将委托设置为零。
  2. 你需要数据。解决方案:您要么设置一个存在的新委托,要么委托应确保它存在(通过成为单例)
于 2015-05-18T12:00:43.947 回答
0

发生这种情况是因为您的架构中存在一个问题:您正在将后台下载的全局任务分配给可能在内存中也可能不在内存中的视图控制器。

如果您希望无论 B 是否存在都能够继续下载,那么:

  1. 创建一个负责下载文件的类“下载器”(我相信您在示例中将其称为 C)。
  2. 这样的类应该有一个“弱”类型的委托,这样如果原始委托消失,应用程序就不会崩溃(注意:这仅在您使用 ARC 时可用)。如果你需要全局监控你的下载进度,切换到NSNotification代理而不是委托,这样多个对象可以同时监控。
  3. 在其他地方初始化 C 的实例:在 A 中或之前。
  4. 将 C 的实例注入 B 以便 B 通过创建自定义init方法或 a @property.
于 2015-05-18T12:04:31.233 回答