1

据我了解 ARC,如果没有对对象的强引用,收集它是公平的游戏(因为它的引用计数为 0)。

如果,在 A 类的方法中,我这样做:

ClassB* b = [[ClassB alloc] init];
[b doStuff];

在 doStuff 中,我这样做:

NSThread* t = [[NSThread alloc] initWithTarget:self selector:@selector(theThread) object:nil];
[t start];

的引用计数b似乎为 0,因为在 A 类中的方法完成后它超出了范围。但是,一个线程当前正在 ClassB 中“运行”,并且需要本地资源。

这里的行为是什么?或者,这里的行为应该是什么,以确保它b一直存在,直到线程全部完成?

谢谢!

4

1 回答 1

4

文档initWithTarget:selector:object:说线程拥有(保持强烈引用)其目标的所有权。当线程对象被销毁时,目标将被释放。

请注意,如果目标还拥有NSThread.

于 2012-10-22T03:33:03.283 回答