gpt4 book ai didi

iOS 将对象保留在后台执行任务的范围内

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:13:49 25 4
gpt4 key购买 nike

如何将一个对象保留在范围内,该对象在后台执行任务,该任务是从另一个对象的方法实例化的?

请参阅以下示例。对象A的显示方法实例化对象B并调用其显示方法。当 B 对象的显示方法启动异步任务时,控制权返回到 A::display 方法,该方法返回,并且 bObject 被释放。当在后台线程中访问 bObject 的数据/方法时,将抛出异常。

维护对象 B 范围的最佳方法是什么?我可以将对象 B 声明为 A 的成员变量,但这会增加对象 A 整个生命周期的范围。

 @implementation A

-(void) display
{
B* bObject = [[B alloc] init];
[bObject display];
}
@end

@implementation B

-(void) display
{
dispatch_async((dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0),{
self.data = 5;
---------
});
@end

最佳答案

以前在 iOS 中,您可以执行此操作,然后假设您创建的对象返回了一些委托(delegate)回调,您可以释放它。现在你必须使“bObject”成为你的类的成员变量,并在你完成它时将它设置为 nil 或等待 A 被销毁,这将使 bObject 超出范围。我假设这是与 ARC 一起使用的,并且一旦“显示”完成,您的局部变量就超出范围并且由于 ARC 而被释放。

你可以把这个加到A:

@property (nonatomic, strong)B *bObject;

关于iOS 将对象保留在后台执行任务的范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12269679/

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