Runloop和autoreleasePool

时间:2014-01-13 12:09:02

标签: objective-c nsthread nsautoreleasepool nsrunloop

关于NSAutoReleasePool https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html的Apple API参考 它指出了这一点 “Application Kit在事件循环的每个循环开始时在主线程上创建一个自动释放池”。

这让我很困惑。我有三个问题。

1)“应用套件”是什么意思? UIKit的?如果“应用程序工具包”意味着UIKit,那么,我创建了一个不使用UIkit的应用程序。它会在事件循环的每个循环开始时在主线程上创建一个autoreleasePool。

2)“在主线程上”意味着在其他线程(不是mainThread)会破坏这个规则吗?

3)“事件循环”是指runloop吗?

# #

添加: 我写了一个演示来测试它。当我创建一个线程时,会自动通过runloop创建一个autoreleasePool吗?

enter image description here enter image description here

然后,在Application MainThread中,创建一个taskThread。 enter image description here

结果: enter image description here

所以,问题2)“在主线程上”意味着在其他线程(不是mainThread)会打破这个规则吗? 在这个演示中,它不是。每个runloop的第二个线程自动创建一个autoreleasePool。因为调用了autoreleaseObject的dealloc方法。

我的演示有什么问题吗?这让我很困惑。

1 个答案:

答案 0 :(得分:1)

  1. 您正在查看Mac文档。 AppKit是UIKit的Macintosh版本。两者在自动释放池方面都有相同的逻辑
  2. 是。新线程不会自动拥有自动释放池或事件循环。话虽如此,大多数时候你不会自己创建新线程。有些东西,比如GCD和NSOperation,可以在没有手动内容的情况下完成所需的大部分工作
  3. 我认为就此而言,是的