没有ivars - >我错过了什么?

Dan*_*ark 8 objective-c automatic-properties ios

我从不使用伊娃.我只使用属性 - 有时使用基本类型分配属性,有时使用"私有"类扩展.我已经看到了不使用ivars切换到ARC的优点 - 我有一些带有大量ivars的借用代码,我仍然不能"ARC",因为我不知道需要保留什么.所以我知道使用ivars的一些优点,但使用ivars而不是属性有什么好处?

注意:我完全依赖于(通过编译器?)为属性声明自动添加的ivars.

不要标记为关闭:我已经看过其他一些问题,比如这个这个,没有一个问题.标题看起来不错,但就像SO上的那么多问题一样,问题是一堆奇怪的疑惑和其他东西.

Stu*_*art 4

声明的属性不能以与 ivar 相同的方式处理@protected。您可以在类扩展中声明该属性以使其对任何其他类保持私有,或者在标头接口中声明它以使其可公开访问,但是无法使其仅可由子类访问。这需要 ivar 声明。

编辑

只是另一个简短的想法。我最近写了很多框架类,我认为使用 iVars 作为文档可能有一些话要说。

例如,假设您正在紧密循环中调用某些代码,并且您希望确保其高性能。在这个紧密循环中,您想要访问类的属性,但需要知道每次调用它时返回值是即时计算还是存储在 iVar 中。在标头中查看 iVar 是确保您无需太多开销即可取回该变量的快速方法。

  • 注意:除非我读错了——http://stackoverflow.com/questions/1933438/marking-instance-variables-private/1933537#1933537——甚至“@protected”或“@private”也可以公开通过类别。你的观点仍然有效且有趣,但看起来令人困惑的 iVar 的死亡还不会很快到来。 (2认同)