线程的内存取消后会发生什么?

时间:2010-03-04 22:01:17

标签: iphone nsthread

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

  1. 用户请求来自网络服务的信息。
  2. 计时器启动,如果存在连接,则每秒检查一次。如果没有,请提出一个视图。
  3. 当从Web服务收到所有信息时,2中的计时器结束。
  4. 根据我的理解,在加载Web服务的同时运行计时器需要一个带有计时器的新线程。我明白怎么做,很好。根据我的理解,结束该线程,我称[线程取消];。如何从该线程中处理内存管理。除此之外还有一个计时器。

    我的另一个线程自我终止,当它发布时它会释放它的所有内容。取消是否有办法做到这一点?感谢。

1 个答案:

答案 0 :(得分:1)

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

就内存而言,您将在新线程的入口点创建一个新的自动释放池,您将在该线程的末尾消耗该池。在线程本身内,您完全像在主线程中那样管理内存,当线程终止时,它的所有内存都被释放。

有关所有详细信息,请查看NSThread文档。 Here is Apple的内存管理文档,附有自动释放池的说明