是否会导致在函数参数传递的视图上添加子视图的保留周期?

JsW*_*JsW 5 objective-c ios swift

例如:

// CustomViewClass

- (void)showOnView: (UIView*)view {
    [view addSubview: self.customView];
}
Run Code Online (Sandbox Code Playgroud)

然后在另一个类(如视图控制器)中调用此方法viewDidLoad.

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.customViewClass showOnView: self.view];
}
Run Code Online (Sandbox Code Playgroud)

我将视图控制器的视图传递给CustomViewClass上面.

我的问题是: 它会导致某种保留周期吗?

这些视图是通过弱参数引用的吗?
或者它很好.

如果有人在SwiftObjective-C中解释它,将非常感激.

tru*_*duc 5

什么是保留周期? - 这是两个对象保持彼此引用并被保留的条件,它创建了一个保留周期,因为两个对象都试图相互保留,从而无法释放.

在这种情况下,self.customViewClass请保留对引用的引用,self.viewself.view不保留任何引用self.customViewClass.哪个self.customViewClass是参考self,不是self.view.

所以当然,它不会导致保留周期

不相信我?- 通过尝试在dealloc方法内部记录某些内容来自行检查.

解雇后CustomViewController,如果dealloc调用内部代码并记录某些内容,则表示此处没有保留周期.如果不是,则导致保留周期.

例如

- (void)dealloc {
  NSLog(@"BOOM RIGHT ANSWER!!!");
}
Run Code Online (Sandbox Code Playgroud)