据我所知,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
保持不变直到线程全部完成?
谢谢!
答案 0 :(得分:4)
documentation for initWithTarget:selector:object:
表示该主题拥有其目标的所有权(保持强烈引用)。当线程对象被销毁时,目标将被释放。
请注意,如果目标也拥有NSThread
,这可能会导致保留周期。