如果 @protected 是默认值,为啥这个 ivar 需要 @protected?
Posted
技术标签:
【中文标题】如果 @protected 是默认值,为啥这个 ivar 需要 @protected?【英文标题】:Why does this ivar need @protected if @protected is the default?如果 @protected 是默认值,为什么这个 ivar 需要 @protected? 【发布时间】:2013-06-15 03:06:28 【问题描述】:@interface AClass : SomeType
@protected
NSMutableArray* amINotAlreadyProtected; //?
如果@protected
是默认值,为什么这段代码需要@protected
?这段代码是由一位非常有经验的程序员编写的,但我自己会省略说明符。
【问题讨论】:
@public
、@protected
和 @private
来自一个属性是手动编码的时代(它们没有 @property
指令),并且 iVar 访问几乎是普遍的如果您需要完成工作。他们从不弃用它们,因为部分 Apple 框架仍在使用它们。
@CodaFi 好的。感谢您的信息。
@JoshCaswell 因为一位拥有大约 25 年经验的程序员在他的课堂上写了它。我自己会省略它。
@CodaFi 我想不同意你的观点,但后来我看到你是代表,并认为我比你更有可能是错的。 ^^ 因此,我将把它作为一个问题提出——@private/@protected/@public 是否仍然用于程序员不想用作属性的 ivars,这取决于子类是否继承?跨度>
@Filip 我并没有说它还没有被使用,问题是 Apple 为我们提供了更新更好的工具来帮助加强封装规则。 iVar
访问在接口中自动公开(好吧,受保护),但是 @implementation
指令可以定义 iVars 的新功能违背了 @private
的目的。现代 ObjC 中不需要这些指令
【参考方案1】:
它来自一个你可能会看到的时代:
@interface Foo:Bar
@private
… ivars …
@protected
… ivars …
…
@end
也就是说,虽然@protected 是默认设置,但如果您已切换到其他变体之一并想要切换回来,则需要使用它。而且,是的,有一些理由(通常是不好的理由)来确保 ivar 声明顺序从发布到发布都得到保留。
除此之外,包含默认情况的关键字可确保学究气的灰胡子(如我)可以在声明中完全明确。
然而,像@property
这样的现代添加意味着不再需要这种恶作剧。
【讨论】:
谢谢。是的,我意识到在您在这里看到的情况下,我们需要@protected
,因为我知道关键字@private
后面的所有变量都是私有的,除非切换回@protected
。我问的问题并非如此,因为它前面没有@private
或@public
。【参考方案2】:
不需要关键字@protected
,因为它是默认行为。
但是,无论如何,一些程序员倾向于使用它,以防经验不足的程序员在以后出现并且不知道这一点。还可以提到它增加了代码的可读性,以防有一些变量是受保护的以及其他私有或公共的。
【讨论】:
其实是有需要的。或者是。以上是关于如果 @protected 是默认值,为啥这个 ivar 需要 @protected?的主要内容,如果未能解决你的问题,请参考以下文章
C语言,图中这个函数OK的值为啥是1,return 1和0有啥区别?