子视图控制器可以成为其父视图控制器的委托吗?

Can a child view controller be the delegate of its parent view controller?

假设有两个 classes,class A 和 class B。Class B 是 A 的子视图控制器。

protocol ClassADelegate: class{
     functions
}
class A {
     code
     add B as child view controller
}


protocol ClassBDelegate: class{
     functions
}
class B {
     code
}

考虑到 class A 是 B 的父视图控制器,我的问题是 class A 是否是 class B 的委托并且 class B 是 a class A 的代表,这会产生所有权循环吗?这是不好的做法吗?

Cocoa 中的委托存储为弱引用。弱引用不能像强引用那样使对象保持活动状态,因此您没有强引用循环的风险。

但是,我想不出在什么情况下这会有意义。它不再是真正的委托模式,它只是 2 个对象任意相互发送消息。

if class A is a delegate of class B and class B is a delegate of class A, does that create an ownership cycle? Is this bad practice?

它不一定会产生引用循环。通常,对象不保留其委托。至于这是否是不好的做法,这取决于。这是不寻常的,因为您通常希望委托的生命周期至少与其委托的对象一样长,而您希望子视图控制器的生命周期比其父视图控制器的生命周期短。在不了解您的预期设计的情况下,无法确定。

parent 应该是 child 的代表。

parent,如果它需要告诉 child 一些东西,应该只调用方法。