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

时间:2011-09-14 15:22:24

标签: objective-c ios automatic-properties

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

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

不要标记为关闭:我已经查看了其他一些问题,例如thisthis,但没有一个问题可以解决。 标题看起来不错,但是就像SO上的那么多问题一样,问题是一堆奇怪的疑惑和其他东西。

3 个答案:

答案 0 :(得分:4)

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

修改

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

例如,假设您在紧密循环中调用某些代码,并且您希望确保它具有高性能。在那个紧密循环中你想要访问类的属性,但是需要知道每次调用它时,返回值是在运行中计算还是存储在iVar中。在标题中查看iVar是一种快速方法,可确保您在没有太多开销的情况下获得该变量。

答案 1 :(得分:3)

如果您不需要,我认为没有任何理由使用iVars。如果Apple和编译器想为你工作,我会说让他们。您将拥有更高效,更易于维护的代码。此时iVars是遗留代码。

答案 2 :(得分:1)

对我来说有一个很好的理由:一个恼人的GCC错误,请参阅this other question了解相关信息。

如果您正在使用Clang / LVVM,那么您不必担心此错误。