Tag: 键值 观察

你为什么要用伊娃?

我通常会以另一种方式看待这个问题,比如每个伊娃都必须是一个财产? (我喜欢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; 完全“私人”只能在课堂上继续申报。