在约NSAutoReleasePool https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html 它指向的是 “的应用开发包在事件循环的每个周期的开始创建主线程自动释放池”苹果API参考。Runloop和autoreleasePool
它困惑我。我对此有三个问题。
1)什么是“应用套件”? UIKit的?如果“The Application Kit”是指UIKit,那么我创建一个不使用UIkit的应用程序。它会在事件循环的每个循环开始时在主线程上创建一个autoreleasePool吗?
2)“在主线程上”是指在其他线程上(Not mainThread)会打破这个规则?
3)“事件循环”是指runloop?
# #地址: 我写的一个演示,以测试它。当我创建一个线程时,会自动通过runloop创建一个autoreleasePool?
然后,在应用MainThread,创建taskThread。
结果:
所以,问题2)是“在主线程”是指在其他线程(不mainThread)将打破这个规则? 在这个演示中,事实并非如此。每个runloop的第二个线程会自动创建一个autoreleasePool。因为autoreleaseObject的dealloc方法被调用。
我的演示有什么问题吗?它让我困惑。
1.将它在开始创建主线程上autoreleasePool事件循环的每个循环都不是基于UIKit? 2.我写一个演示来测试它。我创建了一个没有autoreleasePool的线程。在这个线程中,我创建了一个autorelease对象。当线程结束时,调用autorelease Object dealloc。为什么? –
1.否,因为运行循环是UIKit/AppKit的属性。毫无疑问,其他框架将会有一个。 2.“在Objective-C框架中链接的应用程序通常必须在其每个线程中至少创建一个自动释放池”https://developer.apple.com/library/ios/documentation/cocoa/conceptual/Multithreading/CreatingThreads/CreatingThreads .html –
1. Runloop是UIKit的一个属性吗?我不这么认为。每个线程都有一个且只有一个runloop,它根据需要自动创建。 2。我写这个demo想测试wheather,第二个线程每个runloop都会创建autoreleasePool,Only。 –