[英]Would it cause retain cycle that add a subview on a view passed by parameter of a function?
例如:
// CustomViewClass
- (void)showOnView: (UIView*)view {
[view addSubview: self.customView];
}
然后在另一个类中调用此方法,如视图控制器的viewDidLoad
。
- (void)viewDidLoad {
[super viewDidLoad];
[self.customViewClass showOnView: self.view];
}
我将视图控制器的视图传递给CustomViewClass
,如上所述。
我的问题是:它会导致某种保留周期吗?
这些视图是通过弱参数引用的吗?
或者它很好。
如果有人在Swift和Objective-C中解释它,将非常感激。
什么是保留周期? - 这是两个对象保持彼此引用并被保留的条件,它创建了一个保留周期,因为两个对象都试图相互保留,从而无法释放。
在这种情况下, self.customViewClass
保持对它的引用self.view
但self.view
不保留对任何参考self.customViewClass
。 其中引用self.customViewClass
是self
,而不是self.view
。
所以当然, 它不会导致保留周期
不相信我? 🤣 - 通过尝试在dealloc
方法中记录某些内容来自行检查。
解雇CustomViewController
,如果调用dealloc
的代码并记录某些内容,则表示此处没有保留周期。 如果不是,则导致保留周期。
例如
- (void)dealloc {
NSLog(@"BOOM RIGHT ANSWER!!!");
}
当两个类具有指向彼此的对象时发生内存泄漏。例如
class A{
var object_b = B()
}
class B{
var object_a = A()
}
现在考虑你的情况:// CustomViewClass
- (void)showOnView: (UIView*)view {
[view addSubview: self.customView];
}
你的“view”对象是局部变量.CustomViewClass doest不引用superview“view”。
现在,当customview添加到superview时:
- (void)viewDidLoad {
[super viewDidLoad];
[self.customViewClass showOnView: self.view];
}
当CustomViewClass的showOnView函数调用superview时,只需添加子视图CustomViewClass视图。
要查找内存泄漏,请始终在视图和viewController类中添加deinit函数,以便可以确定是否已取消分配类。
deinit {
print("deinit called " + "Class name")
}
这不会导致保留周期。 它是对象的单向引用,其中父视图在辅助(自定义)视图中具有引用。 但是,父视图中没有该辅助视图的引用。 因此,除非出现这种情况,否则就保留周期而言,您是非常安全的,并且不需要父视图的弱引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.