繁体   English   中英

ARC在什么条件下保留这个对象?

[英]Under what conditions will this object be retained by ARC?

例如,如果我有几个这样连接的IBOutlets:

@property (nonatomic, strong) IBOutlet NSTextField * textField; 
@property (nonatomic, strong) IBOutlet NSTextField * anotherOne;  
@property (nonatomic, strong) IBOutlet NSButton * button; 
/* And so on...*/

然后我将在IB中创建父视图并将其与父视图(也称为强实例变量)连接:

@property (nonatomic, strong) IBOutlet NSView * customView; 

我的问题是:如果我这样做,ARC会保留此自定义视图及其所有子视图:

NSArray * subviews = [customView subviews];
for (NSView * view in [subviews copy]) {
     [view removeFromSuperview]; /* Is view being retained? */
}

我认为将它设置为强大的属性会导致它被保留。 Apple的文档说明如果以后可能需要它们,您应该保留所谓的removeFromSuperview视图。 如果在整个removeFromSuperview调用期间没有保留视图,有人可以告诉我如何保留它吗?

谢谢。

更新:我最近了解到调用addObject:someObj会增加someObj的保留计数。 因此,将其添加到数组将导致它被保留。 是否有任何泄漏涉及将其添加到可变阵列以增加保留计数,或ARC是否会为我处理这些?

我不会在你的例子中看到泄漏。 您不需要为IB中创建的对象定义强属性,因为IB会自动保留它们。 但是,当使用ARC时,这不应该有所不同,因为运行时无论如何都会为您清理。

如果我想保留它们,我还会将视图元素保存在数组中。 所以NSMutableArray会成为你的朋友。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM