首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么DispatchGroup deinit从不被调用?

为什么DispatchGroup deinit从不被调用?
EN

Stack Overflow用户
提问于 2020-12-08 19:50:52
回答 1查看 78关注 0票数 1
代码语言:javascript
复制
final class MyDispatchGroup: DispatchGroup {
    deinit {
        print("DEINIT")
    }
}

var dispatchGroup: MyDispatchGroup? = MyDispatchGroup()
dispatchGroup = nil

我找不到任何关于它的信息,我很好奇它为什么会这样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-08 23:52:13

调度对象并不符合所有类型的继承行为。尝试覆盖init。(如果您查看指定初始化器的标头,则会显示“/* not inherited */”。)或者尝试在子类中实现另一个方法,然后从实例中调用它。或者为您的类保留一个强引用,然后在“Debug Memory Graph”导航器中查找它,但您不会在那里找到它。这些传统的继承行为都不起作用。

调度对象有一段复杂的历史。最初,它们是通过C API公开的,并不符合ARC。然后,他们向这个C API对象添加了ARC功能(可以使用编译时标志打开或关闭)。然后他们用更传统的Swift对象类定义包装了C API,但实际上仍然在幕后使用这个旧的C API。

归根结底,DispatchGroup不支持子类化。Can't subclass DispatchGroup - "only visible via the Objective-C runtime"?认为这个问题已经在iOS 10+中“修复”了,但它并没有。我唯一的问题是,考虑到这一切,而且经过这么长时间,他们为什么还没有将DispatchGroup声明为final

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65198376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档