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

我从来没有使用ivars。 我只使用属性 – 有时分配属性与原始types,有时在一个“私人”类扩展名 。 我已经看到了不使用ivars切换到ARC的好处 – 我有一些借用的代码,有很多ivars,但我仍然不能“ARC”,因为我不知道需要保留什么。 所以我知道使用ivars的一些优点,但使用ivars而不是属性的优点是什么?

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

不要标记结束:我已经看过其他一些问题,比如这个和这个 ,都没有出现。 标题看起来不错,但就像这么多的问题, 这些问题是一个奇怪的疑惑和其他东西一团糟。

宣布的属性不能被视为与@protected伊娃相同的方式。 你可以在一个类扩展中声明这个属性来保持它与其他类的私有性,或者在头接口中声明它,使其可以被公开访问,但是没有办法使它只能被子类访问。 这将需要伊娃的声明。

编辑

还有一个简短的想法。 我最近写了很多框架类,我认为使用iVars作为文档可能有些东西。

例如,假设您在紧密循环中调用一些代码,并且要确保它是高性能的。 在那个紧密的循环里面,你想要访问一个类的属性,但是需要知道每次你调用它的返回值是在飞行中计算还是存储在一个iVar中。 在头文件中查看iVar是一种快速的方法,可以确保您可以在没有太多开销的情况下返回variables。

如果你不需要,我看不出有什么理由使用iVar。 如果苹果和编译器想为你工作,我说让他们。 您将拥有更高效,更易于维护的代码。 在这一点上,iVars是传统代码。

对我来说有一个好的理由:一个恼人的GCC bug,请参阅这个其他问题的描述。

如果你使用Clang / LVVM,那么你不必担心这个错误。