【问题标题】:Dealloc in a thread线程中的dealloc
【发布时间】:2011-10-06 19:14:50
【问题描述】:

在应用程序中有一个可以下载的文档列表。

我使用 NSURLRequest 和 NSURLConnection 管理异步下载过程。 文档的查看由 QLPriviewController 管理。

当我下载一个文档并且在它完全下载之前我推回并按下另一个文档时,我收到了这个错误:

*** -[QLPreviewController respondsToSelector:]: message sent to deallocated instance 0x3479a0

我找到了问题,但我不知道如何解决。

在 dealloc 方法中,我释放了 QLPreviewController。 当我删除它正在工作的版本时,但我猜它是内存泄漏。

有人可以帮我解决这个脑筋急转弯吗?

编辑:

请求和连接的初始化:

NSURLRequest *theRequest = [NSURLRequest requestWithURL:document.latestVersionURL
                                                        cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                    timeoutInterval:60.0];

            theConnection = [NSURLConnection connectionWithRequest:theRequest delegate:self];

【问题讨论】:

  • 你能发布更多核心还是仅仅使用仪器僵尸来检测这个dealloc?处理 nsurlconnection 有时很难从内存管理方面理解..
  • 为什么会是内存泄漏?它已经发布了自己,这就是您遇到崩溃的原因。您正试图再次释放它。您能否发布代码显示您如何启动 QLPreviewController?

标签: iphone ios multithreading memory memory-management


【解决方案1】:

保留对NSURLConnection 的引用作为实例变量。

在您的 dealloc 方法中,在释放 QLPreviewController 之前,请在 NSURLConnection 上调用 cancel

这将停止请求并阻止它尝试调用已解除分配的QLPreviewController 上的任何方法。

【讨论】:

  • 我得到一个错误:*** -[NSURLConnection cancel]: message sent to deallocated instance 0x393880 I check:if(theConnection) { [theConnection cancel]; }
猜你喜欢
  • 2011-02-14
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多