为什么没有必要发布一个设置为“分配”?
-
03-07-2019 - |
题
如果我有这样的话,我一直在读:
@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',而不是对象。
不隶属于 StackOverflow