ARC的线程和对象生命周期

时间:2012-10-22 03:23:06

标签: objective-c multithreading macos cocoa nsthread

据我所知,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保持不变直到线程全部完成?

谢谢!

1 个答案:

答案 0 :(得分:4)

documentation for initWithTarget:selector:object:表示该主题拥有其目标的所有权(保持强烈引用)。当线程对象被销毁时,目标将被释放。

请注意,如果目标也拥有NSThread,这可能会导致保留周期。