Objective c 在什么条件下,ARC将保留此对象?

Objective c 在什么条件下,ARC将保留此对象?,objective-c,cocoa,automatic-ref-counting,Objective C,Cocoa,Automatic Ref Counting,例如,如果我有几个IBO插座连接如下: @property (nonatomic, strong) IBOutlet NSTextField * textField; @property (nonatomic, strong) IBOutlet NSTextField * anotherOne; @property (nonatomic, strong) IBOutlet NSButton * button; /* And so on...*/ 然后我要在IB中创建一个父视图,并将其与

例如,如果我有几个IBO插座连接如下:

@property (nonatomic, strong) IBOutlet NSTextField * textField; 
@property (nonatomic, strong) IBOutlet NSTextField * anotherOne;  
@property (nonatomic, strong) IBOutlet NSButton * button; 
/* And so on...*/
然后我要在IB中创建一个父视图,并将其与一个父视图(也称为强实例变量)连接:

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

NSArray * subviews = [customView subviews];
for (NSView * view in [subviews copy]) {
     [view removeFromSuperview]; /* Is view being retained? */
}
我认为,将其设置为一个强大的属性会导致它被保留。苹果的文档中说,如果您以后可能需要,您应该保留您称之为removeFromSuperview的任何视图。如果在调用removeFromSuperview的整个过程中未保留该视图,请有人告诉我如何保留该视图

谢谢


更新:我最近了解到,调用addObject:someObj将增加someObj的保留计数。因此,将其添加到数组将导致其保留。将其添加到可变数组以增加保留计数时是否存在泄漏,或者ARC是否会为我处理这些泄漏?

在您的示例中,我看不到泄漏。 您不需要为在IB中创建的对象定义强属性,因为IB会自动保留它们。但是,在使用ARC时,这不会产生任何影响,因为运行时会为您清理

如果我想保留视图元素,我也会将它们保存在一个数组中。
所以NSMutableArray就是您在这里的朋友。

这样我就可以在子视图上循环并将每个子视图添加到一个可变数组中?这能留住他们吗?是的。这会奏效的。正如您自己编写的,将对象添加到数组、集合、列表。。。增加保留计数。请向我详细说明这与
osx
有什么关系。这与
osx
无关,因此请不要再次使用该标记重新标记。
NSArray * subviews = [customView subviews];
for (NSView * view in [subviews copy]) {
     [view removeFromSuperview]; /* Is view being retained? */
}