2011-11-04 70 views
1

可能重复:
Style: Dot notation vs. message notation in Objective-C 2.0代码风格:访问财产

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

任何人都想过要使用哪种风格(以及为什么)?请给出意见。

+0

+1对于一个好问题,但投票关闭,因为它实际上是重复的。更重要的是,重复Q中的答案显着更好。 – Caleb

+0

@Caleb,你说的对,他们是。这个问题应该是第一个来源。 –

回答

3

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

但是,关于点符号的一件事情是,您不能将Objective-C的点符号与作业左侧的C点符号混合使用。换句话说,不要尝试这个办法:

myView.bounds.origin.x = 50. 

相反,您必须说:

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

为点语法仅仅是调用方法的语法糖。所以[NSArray array].count是相同的[[NSArray array] count],并UIScreen.mainScreen是相同的[UIScreen mainScreen]

你不应该使用点语法比属性访问的任何其他。对于物业访问,选择是个人风格的问题。

+2

对于像属性一样行为的方法,我认为可以使用点表示法,即使它们没有声明为属性。 NSArray的“count”方法就是一个很好的例子。 NSDictionary的“allKeys”和“allValues”是另外两个。 – Caleb

+0

@Caleb,我可以理解那个意见。我是从苹果支持的官方政策角度发言的。我个人避免使用点语法,所以对我来说这不是一个问题。 –

+1

我不知道苹果在这个问题上有明确的官方声明。你知道吗?正如[Objective-C编程语言](http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocObjectsClasses.html#//apple_ref/doc/uid/TP30001163- CH11-SW17)中,点语法用于访问器,但我不认为这意味着您必须将使用限制为使用@property语法声明的属性。 – Caleb