【发布时间】:2013-11-02 12:17:58
【问题描述】:
我想了解更多关于 ARC 以及弱参考和强参考的信息:
实际上,如果我有:
@interface
@property (weak) IBOutlet UIButton * button
@property (weak) UIView *subview
@end
@implementation
-(BOOL) viewDidLoad
{
UIView *aSubView= [[UIView alloc]....];
[self.view addSubview:aSubview];
self.subview = aSubview;
}
按钮有弱引用是正常的,因为它的父视图有强引用。
现在,我以编程方式添加UIView,我还添加了一个弱引用,因为当我将这个子视图添加到超级视图中时,会有一个强引用。第一个问题:这是一个好方法吗?
现在我真正的问题在于该集合的第二个源代码。我可以用IBOutletCollection 放什么?
如果我想保留一系列以编程方式添加的视图,我不能,因为NSArray 也保留了强引用和视图的超级视图,所以会有一些泄漏。我怎样才能拥有我的子视图的NSArray 而不会泄漏?
@property (?) IBOutletCollection .....
@property (?) NSArray *subviews
-(BOOL) viewDidLoad
{
?
}
【问题讨论】:
-
您应该查看什么是 ARC 循环引用以帮助您理解这一点。只要不创建循环引用(也称为“保留循环”),您就可以拥有任意数量的强引用。因此,您的属性可以是
strong而不是weak;实际上,如果您可能要从一个地方删除子视图并稍后将其添加到另一个超级视图,这很常见。
标签: ios objective-c memory-management memory-leaks outlet