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

时间:2016-10-29 03:55:53

标签: swift delegation

假设有两个类,A类和B类.B类是A的子视图控制器。

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


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

考虑到A类是B的父视图控制器,我的问题是,如果A类是B类的委托,而B类是A类的委托,是否会创建所有权周期?这是不好的做法吗?

3 个答案:

答案 0 :(得分:1)

Cocoa中的委托存储为弱引用。弱引用不能像强引用一样保持对象存活,因此您没有强引用周期的风险。

然而,我无法想到这种情况有意义的情况。它不再是一个委托模式,只是两个对象随意地相互传递。

答案 1 :(得分:1)

父母应该是孩子的代表。

父母,如果需要告诉孩子什么,应该只调用方法。

答案 2 :(得分:0)

  

如果A类是B类的委托,而B类是A类的委托,是否会创建所有权周期?这是不好的做法吗?

它不一定产生参考周期。通常,对象不保留其委托。至于它是否是不好的做法,这取决于。这很不寻常,因为您通常希望代表的生命周期至少与其委托的对象一样长,而您期望一个子视图控制器寿命比父母短。如果不了解您的预期设计,就无法肯定地说出来。