例如,如果我有几个这样连接的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是否会为我处理这些?
答案 0 :(得分:2)
我不会在你的例子中看到泄漏。 您不需要为IB中创建的对象定义强属性,因为IB会自动保留它们。但是,当使用ARC时,这不应该有所不同,因为运行时无论如何都会为你清理。
如果我想保留它们,我还会将视图元素保存在数组中。 所以NSMutableArray会成为你的朋友。