gpt4 book ai didi

objective-c - 什么情况下这个对象会被ARC保留?

转载 作者:行者123 更新时间:2023-12-03 17:39:54 26 4
gpt4 key购买 nike

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

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

然后我要在 IB 中创建一个父 View 并将其与父 View (也声明为强实例变量)连接:

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

我的问题是:如果我要这样做,ARC 会保留此自定义 View 及其所有 subview 吗:

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

我相信将其设置为强大的属性会使其被保留。 Apple 的文档指出,如果以后可能需要它们,您应该保留调用removeFromSuperview 的任何 View 。如果在调用removeFromSuperview的过程中 View 没有被保留,有人可以告诉我如何保留它吗?

谢谢。

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

最佳答案

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

如果我想保留 View 元素,我也会将它们保存在数组中。所以 NSMutableArray 会是你的 friend 。

关于objective-c - 什么情况下这个对象会被ARC保留?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20773437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com