0

我的编码团队已选择实施一种编码标准,即对所有实例 ivars 使用 @property。对于公开的东西,我们当然在我们的 .h 文件中定义它们,但对于我们的私有的东西,我们在 .m 文件中定义它们,在我们的实现之上的一个接口中。

  1. 我将它们称为self.myvar = whatever还是 有关系[self setMyvar:whatever]吗?这对我来说似乎一点也不重要,而且在我们的代码库中似乎有很多混合方式。
4

4 回答 4

5
self.myvar = whatever

是语法糖

[self setMyvar:whatever]

它们完全一样。完全没有区别。

于 2013-04-19T16:37:49.537 回答
5

正如其他人所指出的那样,foo.bar并且[foo bar]是等效的(除了对前者的附加类型要求,但这是次要的)。

FWIW,我们的团队决定完全避开点语法。动机是避免歧义;消息发送始终看起来像消息发送,并且 .s 始终用于访问结构成员。

我们还限制我们仅使用@{}@[]创建集合。所有访问都通过indexOfObject:,objectForKey:等完成...

同样,我们在任何地方都使用 ARC,除了位于 ObjC 和 C++ 之间的几个边界文件。我们为所有 DEBUG 构建打开了静态分析器,所有警告都被视为硬错误。我们还打开了几乎所有实用的编译器警告(有些根本不实用)。

于 2013-04-19T17:05:37.833 回答
2

self.myVar = x 实际上编译为 [self setMyVar: x];。没有运行时差异。

然而; 为了便于代码可读性,我建议坚持使用一种或另一种方案。如果您已经强制执行了属性,最好将所有内容都保留为点符号 - 如果没有其他原因,只是因为这样可以更轻松地搜索您的代码。

于 2013-04-19T16:39:38.427 回答
2

类似的问题还有很多。

在我们的编码标准中,我们不关心使用点符号或方法来访问属性。我们甚至有时对未正式声明为属性的方法使用点表示法,因为对于库方法,有时如果不检查文档就很难知道,而且没有任何区别。

禁止直接方法调用是没有意义的(难以实施)。
我看到了禁止点符号的编码标准。

一般来说,我倾向于使用点表示法,因为它使我能够将作业拆分为视觉上分离的部分,例如

self.a = x;

反对

[self setA:x];

第二个对我来说似乎不太可读,但这是个人品味的问题。

另一方面,有时直接使用该方法更容易,例如,当您将对象作为 anid并且您必须强制转换以使用点符号时。

我认为将两者混合是一个很好的解决方案。选择一个可以增加给定位置可读性的选项。

于 2013-04-19T16:48:30.620 回答