我的编码团队已选择实施一种编码标准,即对所有实例 ivars 使用 @property。对于公开的东西,我们当然在我们的 .h 文件中定义它们,但对于我们的私有的东西,我们在 .m 文件中定义它们,在我们的实现之上的一个接口中。
- 我将它们称为
self.myvar = whatever
还是 有关系[self setMyvar:whatever]
吗?这对我来说似乎一点也不重要,而且在我们的代码库中似乎有很多混合方式。
我的编码团队已选择实施一种编码标准,即对所有实例 ivars 使用 @property。对于公开的东西,我们当然在我们的 .h 文件中定义它们,但对于我们的私有的东西,我们在 .m 文件中定义它们,在我们的实现之上的一个接口中。
self.myvar = whatever
还是 有关系[self setMyvar:whatever]
吗?这对我来说似乎一点也不重要,而且在我们的代码库中似乎有很多混合方式。 self.myvar = whatever
是语法糖
[self setMyvar:whatever]
它们完全一样。完全没有区别。
正如其他人所指出的那样,foo.bar
并且[foo bar]
是等效的(除了对前者的附加类型要求,但这是次要的)。
FWIW,我们的团队决定完全避开点语法。动机是避免歧义;消息发送始终看起来像消息发送,并且 .s 始终用于访问结构成员。
我们还限制我们仅使用@{}
和@[]
创建集合。所有访问都通过indexOfObject:
,objectForKey:
等完成...
同样,我们在任何地方都使用 ARC,除了位于 ObjC 和 C++ 之间的几个边界文件。我们为所有 DEBUG 构建打开了静态分析器,所有警告都被视为硬错误。我们还打开了几乎所有实用的编译器警告(有些根本不实用)。
self.myVar = x 实际上编译为 [self setMyVar: x];。没有运行时差异。
然而; 为了便于代码可读性,我建议坚持使用一种或另一种方案。如果您已经强制执行了属性,最好将所有内容都保留为点符号 - 如果没有其他原因,只是因为这样可以更轻松地搜索您的代码。
类似的问题还有很多。
在我们的编码标准中,我们不关心使用点符号或方法来访问属性。我们甚至有时对未正式声明为属性的方法使用点表示法,因为对于库方法,有时如果不检查文档就很难知道,而且没有任何区别。
禁止直接方法调用是没有意义的(难以实施)。
我看到了禁止点符号的编码标准。
一般来说,我倾向于使用点表示法,因为它使我能够将作业拆分为视觉上分离的部分,例如
self.a = x;
反对
[self setA:x];
第二个对我来说似乎不太可读,但这是个人品味的问题。
另一方面,有时直接使用该方法更容易,例如,当您将对象作为 anid
并且您必须强制转换以使用点符号时。
我认为将两者混合是一个很好的解决方案。选择一个可以增加给定位置可读性的选项。