Tag: 伊娃

在ARC时代的财产与伊娃

这是我的理解是,设置一个伊娃现在保留对象分配给它,因为设置variables默认为strong限定符。 因为ivars处于声明对象的范围内,并且strong保留了variables范围内的对象,这意味着在包含ivar的对象仍然活着时,ivars值永远不会被释放。 它是否正确? 如果是这样的话,我认为从内存pipe理的angular度来看,保留(强)财产和简单的伊娃之间没有区别吗?

你为什么要用伊娃?

我通常会以另一种方式看待这个问题,比如每个伊娃都必须是一个财产? (我喜欢bbum对这个问题的回答)。 我几乎完全在我的代码中使用属性。 然而,我经常和一个在iOS上开发很长时间的承包商合作,他是一个传统的游戏程序员。 他写的代码几乎没有声明任何属性,并依赖于ivars。 我认为他是这样做的,因为1)他已经习惯了,因为属性并不总是存在,直到目标C 2.0(2007年10月)和2)为最小的性能增益不经过一个getter / setter。 虽然他写的代码不会泄漏,但是我仍然希望他使用超过ivars的属性。 我们谈到了这一点,他或多或less看不到使用属性的理由,因为我们没有使用KVO,而且他在处理记忆问题方面经验丰富。 我的问题是更多…为什么你会想要使用一个伊娃期 – 有经验与否。 真的有这么大的performance差异,使用伊娃是有道理的吗? 同样作为澄清的一点,我根据需要重写setter和getter,并使用与getter / setter内部属性相关的ivar。 但是,在getter / setter或init之外,我总是使用self.myProperty语法。 编辑1 我感谢所有的好回应。 我想解决的一个问题似乎是不正确的,那就是用一个ivar你可以封装你没有的财产。 只需在类继续中定义属性即可。 这将隐藏来自外部的财产。 您也可以在接口中声明属性readonly,并在实现中将其重新定义为readwrite: // readonly for outsiders @property (nonatomic, copy, readonly) NSString * name; 并在课堂上继续: // readwrite within this file @property (nonatomic, copy) NSString * name; 完全“私人”只能在课堂上继续申报。