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