0

如果我有这样的东西,我一直在阅读:

@property (nonatomic, assign) UIView *anView;

那我就不用关心内存管理了。我不必在 -dealloc 方法中执行 [anView release]。

为什么?

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

@synchronize anView;

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

- (UIView*) anView {
    return anView;
}

Setter 可能看起来像:

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

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

4

1 回答 1

4

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

使用“分配”属性时,您不必释放对象,因为您从未保留它(这是其他人的责任)。

本质上,这会创建一个弱引用—— anView 可能在属性仍然指向它时被释放。通常,您将“分配”用于原始数据类型,而不是对象。

于 2009-04-30T08:21:51.413 回答