ARC不消除Objective-C中对属性的需求吗?

Eri*_*tto 3 properties objective-c ivar automatic-ref-counting

可能重复:
使用ARC为什么再使用@properties?

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

回到这个问题,似乎我们使用属性的主要原因是避免内存管理问题.换句话说,通过创建属性,我们不需要写出所有这些保留和释放方法:

- (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
} 
Run Code Online (Sandbox Code Playgroud)

由于ARC现在处理这个问题,我们是不是可以一起取消属性,只是通过做类似的东西来设置ivars otherObject = anotherObject

omz*_*omz 5

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

属性甚至不必由实例变量支持.例如,您可能backgroundColor在视图中有一个实际返回并设置backgroundColor某个私有子视图的属性的属性.或者,假设您有一个readonly name属性实际上不对应于实例变量,而只是连接firstNamelastName.

使用属性而不是普通的实例变量访问还允许您更轻松地实现延迟初始化,而无需在很多地方更改代码.

如果你只使用一个属性为你处理内存管理,你现在可以在很多情况下没有它,但是当你后来决定它不应该只是映射到一个实例变量时,使用一个属性仍然会给你更大的灵活性.