【问题标题】:Code style: accessing as property [duplicate]代码风格:作为属性访问[重复]
【发布时间】:2011-12-22 06:29:14
【问题描述】:

可能重复:
Style: Dot notation vs. message notation in Objective-C 2.0

在 NSArray 的苹果文档中它说:“实例方法>”“计数”。所以,通常我会写[[NSArray array] count]。但是,[NSArray array].count 工作得很好......最近我发现UIScreen.mainScreen.bounds 也被接受了。 mainScreenUIScreen 的类方法。

有人想过要使用哪种风格(以及为什么)?请发表评论。

【问题讨论】:

  • +1 表示一个好问题,但投票结束,因为它实际上是重复的。更重要的是,重复 Q 中的答案明显更好。
  • @Caleb,你是对的,他们是。这个问题应该是第一个来源。

标签: iphone objective-c ios xcode properties


【解决方案1】:

IMO,点语法意味着一定的被动性;使用它不应该有明显的副作用。将 NSArray 的 -count 方法视为一个属性可能是可以的,即使它实际上不是一个属性(如果在创建 NSArray 时属性已经成为语言的一部分),但说 someMutableArray.removeLastObject 会冒犯我的敏感性即使它可能工作得很好。

关于点表示法,您应该了解的一件事是,您不能在赋值左侧将 Objective-C 的点表示法与 C 的点表示法混合使用。换句话说,不要这样尝试:

myView.bounds.origin.x = 50.

你必须改为:

CGRect newBounds = myView.bounds;
newBounds.origin.x = 50;
myView.bounds = newBounds;

【讨论】:

    【解决方案2】:

    点语法 for 只是调用方法的语法糖。所以[NSArray array].count 等同于[[NSArray array] count]UIScreen.mainScreen 等同于[UIScreen mainScreen]

    除了属性访问之外,你不应该使用点语法。对于财产访问,选择是个人风格的问题。

    【讨论】:

    • 我认为即使没有将它们声明为属性,也可以对行为类似于属性的方法使用点表示法。 NSArray 的count 方法就是一个很好的例子; NSDictionary 的allKeysallValues 是另外两个。
    • @Caleb,我能理解这种观点。我是从苹果官方支持的政策角度说的。我个人避免使用点语法,所以这对我来说不是问题。
    • 我不知道 Apple 关于这个问题的明确官方声明。你知道一个吗?正如The Objective-C Programming Language 中所解释的,点语法用于访问器,但我不认为这意味着您必须限制使用@property 语法声明的属性。
    • @Caleb,就像你说的,文档声明点语法用于访问器,它将访问器定义为“获取或设置对象属性值的实例方法”。我将“属性”解释为 Objective-C 属性,但我想您也可以将其解释为对属性概念的引用,而不是特定的语言特性。无论哪种方式,它都非常挑剔,所以您的用例几乎可以肯定是可以接受的。
    猜你喜欢
    • 2013-10-13
    • 2013-04-07
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2016-03-21
    • 2011-12-19
    • 1970-01-01
    • 2022-11-06
    相关资源
    最近更新 更多