gpt4 book ai didi

objective-c - ARC 的线程和对象生命周期

转载 作者:行者123 更新时间:2023-12-03 16:54:51 26 4
gpt4 key购买 nike

据我了解 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 一直保留到线程全部完成?

谢谢!

最佳答案

documentation for initWithTarget:selector:object:表示线程取得其目标的所有权(保留对其目标的强引用)。当线程对象被销毁时,目标将被释放。

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

关于objective-c - ARC 的线程和对象生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13004605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com