final class MyDispatchGroup: DispatchGroup {
deinit {
print("DEINIT")
}
}
var dispatchGroup: MyDispatchGroup? = MyDispatchGroup()
dispatchGroup = nil我找不到任何关于它的信息,我很好奇它为什么会这样。
发布于 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。
https://stackoverflow.com/questions/65198376
复制相似问题