NSRunloop和thread什么关系?一个 thread中必须有一个autoreleasepool吗?

每个thread中都有一个默认的NSRunloop,主线程中的NSRunloop默认是开启的,其余线程的NSRunloop默认是未开启的(包括自己通过NSThread创建的线程,以及通过get_gloabal_queue获取的线程)。

一个thread中不是必须要有autoreleasepool,而且默认也没有autoreleasepool。

一个UI事件,一个timer,一个系统delegate都称之为runloop,系统为每个runloop分配一个autoreleasepool。
一个thread中如果拥有一个runloop,则这个thread中就包含一个autoreleasepool。

为了做到及时回收内存,以及避免不必要的内存泄漏,自己手动开辟的子线程最好手动添加autoreleasepool。

你可能感兴趣的:(NSRunloop和thread什么关系?一个 thread中必须有一个autoreleasepool吗?)