• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 16:05:25 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

请参阅以下示例。对象 A 的 display 方法实例化对象 B 并调用它的 display 方法。当 B 对象的 display 方法启动一个异步任务时,控制返回到 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



Best Answer-推荐答案


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

您可以将其添加到 A:

@property (nonatomic, strong)B *bObject;

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap