0

我正在编写代码来检查是否存在网络连接。简而言之,我想要发生的事件的顺序是这样的:

  1. 用户从 Web 服务请求信息。
  2. 计时器启动,并每秒检查是否存在连接。如果没有,请提出意见。
  3. 当信息全部从网络服务接收到时,2中的定时器结束。

据我了解,在加载 Web 服务的同时运行计时器需要一个带有计时器的新线程。我了解如何做到这一点并且很好。据我了解,要结束该线程,我调用 [thread cancel];。我如何从该线程中处理内存管理。里面有一个计时器,除此之外。

我的另一个线程自我终止,当它终止时,它会释放它的所有内容。有没有办法通过取消来做到这一点?谢谢。

4

1 回答 1

1

您需要在主线程中保留使用 UIKit 的任何内容,因为 UIKit 组件不能保证是线程安全的。因此,您的计时器和警报在您的主线程中,您的网络流量在后台线程中。后台线程将使用其中一种performSelectorOnMainThread:变体与主线程通信。您当然可以在后台线程中使用计时器,只要它通过类似的功能与您的 UI 通信并且不尝试自己发出警报。在从主线程到后台线程的通信方面,请查看这些performSelector:onThread方法。

在内存方面,您将在新线程的入口点创建一个新的自动释放池,并在线程结束时耗尽该池。在线程本身中,您可以像在主线程中一样管理内存,并且当线程终止时,它的所有内存都会被释放。

有关所有详细信息,请查看NSThread文档。这是Apple 的内存管理文档,其中包含有关 Autorelease 池的说明

于 2010-03-04T23:38:06.193 回答