例如:
// CustomViewClass
- (void)showOnView: (UIView*)view {
[view addSubview: self.customView];
}
然后在另一个类中调用此方法,例如视图控制器viewDidLoad
。
- (void)viewDidLoad {
[super viewDidLoad];
[self.customViewClass showOnView: self.view];
}
我将视图控制器的视图传递给CustomViewClass
,如上所述。
我的问题是:会导致某种保留周期吗?
这些视图是否通过弱参考参数传递? 或者它很好。
如果有人在 Swift 和 Objective-C 中解释它,我们将非常感激。
答案 0 :(得分:5)
什么是保留周期? - 当2个对象彼此保持引用并被保留时,它会创建一个保留周期,因为两个对象都试图相互保留,从而无法释放。
在这种情况下,self.customViewClass
会引用self.view
,但self.view
不会引用self.customViewClass
。其中self.customViewClass
的引用是self
,而不是self.view
。
当然, 它不会导致保留周期
不相信我? - 尝试在dealloc
方法中记录内容,自行检查。
解雇CustomViewController
后,如果调用dealloc
内的代码并记录某些内容,则表示此处没有保留周期。如果不是,则会导致保留周期。
例如
- (void)dealloc {
NSLog(@"BOOM RIGHT ANSWER!!!");
}
答案 1 :(得分:1)
当两个类具有彼此指向的对象时发生内存泄漏。例如。
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视图。
为了查找内存泄漏,请始终在views和viewController类中添加deinit函数,以便确定是否已取消分配类。
deinit {
print("deinit called " + "Class name")
}
答案 2 :(得分:0)
这不会导致保留周期。它是对象的单向引用,其中父视图在辅助(自定义)视图中具有引用。但是,父视图中没有该辅助视图的引用。因此,除非出现这种情况,否则就保留周期而言,您是非常安全的,并且不需要父视图的弱引用。