如果我有这样的话,我一直在读:

@property (nonatomic, assign) UIView *anView;

然后我不必关心内存管理。我不必在-dealloc方法中执行[anView release]。

为什么?

"分配"只是告诉编译器:“嘿,这个属性不会保留任何人分配给它的东西”。然后你可以做

@synchronize anView;

并且编译器神奇地创建了一个getter和setter,其中setter可能看起来像这样:

- (UIView*) anView {
    return anView;
}

并且Setter可能看起来像:

- (void) setAnView:(UIView*)newAnView {
    anView = newAnView;
}

正确/错误?如果这是正确的,则setter声明不拥有newAnView变量的所有权,因为它不是“保留”变量。属性。它只需要它并将其分配给实例变量。因此,在考虑所有权策略时,不需要在-dealloc中释放anView实例变量。该对象不拥有它。那是对的吗?

有帮助吗?

解决方案

是的,你基本上是正确的。我们假设垃圾收集器已关闭(否则无论如何都是无关紧要的。)

使用'assign'属性时,您不必释放该对象,因为您从未保留该对象(由其他人负责)。

基本上,这会创建一个弱引用 - 当属性仍然指向它时,可以释放anView。通常,您对原始数据类型使用'assign',而不是对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top