我有一个从主线程传递到第二个线程的NSDictionary,它保留,使用,然后释放变量。
如果主线程自动释放池在第二个线程仍在使用变量时耗尽怎么办?即使我在第二个线程中保留了变量,主线程的池是否会知道它仍在使用?
感谢。
答案 0 :(得分:2)
自动释放池非常愚蠢。它不“知道”正在使用任何变量。它只是在每个自动释放的对象上调用release
。这通常发生在事件循环的每次迭代结束时。
如果自动释放池在第二个线程有机会保留它之前耗尽,它将被取消分配。相反,在启动线程之前保留将在另一个线程中使用的任何内容通常是个好主意。您无法知道线程何时运行,因此最好假设它在自动释放池耗尽之后才会运行。
换句话说,做这样的事情:
NSDictionary *dictionary = // Get the autoreleased dictionary... somehow
[NSThread detachNewThreadSelector:@selector(myThread:) toTarget:self withObject:[dictionary retain]];
请记住,您的线程现在拥有dictionary
并负责在线程退出之前调用release
,否则您的应用程序将泄漏内存。