objective-c - ARC 是否消除了 Objective-C 中对属性的需求?

标签 objective-c properties automatic-ref-counting ivar

<分区>

Possible Duplicate:
With ARC why use @properties anymore?

注意:我实际上不认为我们可以取消属性,但我试图理解为什么不这样做的原因。 :)

回到 this question ,似乎我们使用属性的主要原因是为了避免内存管理问题。换句话说,通过创建属性,我们摆脱了编写所有这些保留和释放方法的需要:

- (void) setOtherObj:(MyOtherObject *)anOtherObject {

    if (otherObject == anOtherObject) {
    return;  
    }

    MyOtherObject *oldOtherObject = otherObject; // keep a reference to the old value for a second
    otherObject = [anOtherObject retain]; // put the new value in  
    [oldOtherObject release]; // let go of the old object
} 

既然 ARC 现在处理这个问题,我们是否可以不一起取消属性并通过像 otherObject = anotherObject 这样的方式设置 ivars?

最佳答案

内存管理是一个使用属性的原因,但不是唯一的原因。您只能在自己的类中使用普通实例变量,而不能从外部使用。为此,您仍然需要一个属性。

属性甚至不必由实例变量支持。例如,您可能有一个 backgroundColor实际返回并设置 backgroundColor 的 View 中的属性一些私有(private) subview 的属性。 或者,假设您有一个只读 name实际上不对应于实例变量的属性,而只是连接 firstNamelastName .

使用属性而不是简单的实例变量访问还可以让您更轻松地实现惰性初始化,而无需在很多地方更改代码。

如果你只使用一个属性来为你处理内存管理,现在在很多情况下你可以不用它,但是当你以后决定它不应该简单地映射到一个实例变量。

关于objective-c - ARC 是否消除了 Objective-C 中对属性的需求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10585548/

相关文章:

ios - VectorKit MapKit 堆栈溢出崩溃

ios - xCode - Mashape API - Unirest

iphone - iOS : How to put some view on top of presented modal view controller?

C#:半抽象自动属性?

java - 从 Ant 目标向 Java 方法传递变量

C++ 初始化程序不断地在同一内存位置创建新对象

ios - Parse.com 查询数组

javascript - 创建一个具有两个属性的新变量的输出?

objective-c - 将 64 位应用程序安全地转换为 32/64 位应用程序

ios - UIWebView 没有释放内存