Sim*_*ide 0 iphone cocoa memory-management pthreads nsthread
如果我分离NSThread将Cocoa运行在一个单独的内存堆或内存区域?例如,如果我要分离一个线程,使用malloc创建一个大缓冲区,然后让线程退出,我会在某种自动线程清理中恢复该内存,还是会被泄露?
如果我使用POSIX线程(pthread)呢?
请注意,我对ObjC allocs或autorelease pool不感兴趣,我说的是低级缓冲区,例如int*foo = malloc(100000);
NSThread - 就像pthread一样 - 将具有单独的堆栈,但将与任务中的其余线程共享相同的堆.各个任务的线程和堆都是孤立的.
你描述的模式 - 在一个线程中分配,让线程退出 - 将泄漏; 内存将无法恢复.
无论你使用什么样的线程.
对于非常有限的大小分配,您可以使用堆栈缓冲区,当线程退出时将收集该缓冲区.但是,线程的堆栈大小是有限的,如果依赖于大堆栈分配,很容易将堆栈吹出并导致整个应用程序崩溃.
完成后使用malloc()和free().