问题 点符号与方括号和Objective-C中的转换


以下哪项是Objective-C的最佳实践?

UITableView* view = (UITableView*) [self view];
[view setSeparatorColor:[UIColor blackColor]];
[view release];

((UITableView*) self.view).separatorColor = [UIColor blackColor];

或者有更好的方法来写这个吗? self.view 是一个 UIView*

我问两个因为我有一个看起来很奇怪的演员(也许有更好的方法?)并且因为官方文档中的以下文字,这暗示它不仅仅是风格或个人偏好的问题:

另一个优点是编译器在检测到写入只读声明属性的尝试时可以发出错误信号。如果您使用方括号语法来访问变量,那么编译器最好只生成一个未声明的方法警告您调用了一个不存在的setter方法,并且代码在运行时失败。


11907
2018-06-09 12:26


起源



答案:


嗯....点符号最后编译成方括号,但这取决于个人喜好。我个人避免使用点符号,除非我设置/访问标量类型,例如,太容易看下面的内容......

view.step = 2.0;

...而且不知道步骤是标量属性,还是有一个setter方法等。我更喜欢明确并且会使用......

[view setStep:2.0];

但我猜再次个人偏好。


12
2018-06-09 12:31



我也问因为引用的文档(更新引用的更新问题)。 - rid
是的,有使用它的专业人士,但不是我个人的偏好。我经营一家iOS开发公司,除非它是一个标量属性,否则我的所有人都不会使用点符号,但话说再次,这很可能是由于我的偏好! - Simon Lee
除此之外,底线就是这个...如果你喜欢它并且你发现它更容易(使用编译器检查)然后使用它,那就是它的用途! :) - Simon Lee
+1:优秀的Dots是不好的链接。 - andyvn22
阅读完文章之后,我得到的印象是,为了不使用或使用点符号而非命名地命名方法和属性更为重要。如果更好地命名,他的大多数例子都会很容易被清除。例如,[obj value]和[obj value]看起来是一样的,但是一个可能只是获取一个实例变量,一个可能是一个做谁知道什么的方法,但是那种模糊的方式他批评了点符号。清楚地编写代码,它不应该与你使用的内容有关。 - Matt


答案:


嗯....点符号最后编译成方括号,但这取决于个人喜好。我个人避免使用点符号,除非我设置/访问标量类型,例如,太容易看下面的内容......

view.step = 2.0;

...而且不知道步骤是标量属性,还是有一个setter方法等。我更喜欢明确并且会使用......

[view setStep:2.0];

但我猜再次个人偏好。


12
2018-06-09 12:31



我也问因为引用的文档(更新引用的更新问题)。 - rid
是的,有使用它的专业人士,但不是我个人的偏好。我经营一家iOS开发公司,除非它是一个标量属性,否则我的所有人都不会使用点符号,但话说再次,这很可能是由于我的偏好! - Simon Lee
除此之外,底线就是这个...如果你喜欢它并且你发现它更容易(使用编译器检查)然后使用它,那就是它的用途! :) - Simon Lee
+1:优秀的Dots是不好的链接。 - andyvn22
阅读完文章之后,我得到的印象是,为了不使用或使用点符号而非命名地命名方法和属性更为重要。如果更好地命名,他的大多数例子都会很容易被清除。例如,[obj value]和[obj value]看起来是一样的,但是一个可能只是获取一个实例变量,一个可能是一个做谁知道什么的方法,但是那种模糊的方式他批评了点符号。清楚地编写代码,它不应该与你使用的内容有关。 - Matt


2件事

  1. 你没有问过但是 - 我曾经在开头喜欢那些“一行”,但是一段时间后你回到代码时它的可读性就会降低。

  2. 点似乎对我来说更具可读性

我希望 -

    UITableView* view = (UITableView*)self.view;
    view.setSeparatorColor=[UIColor blackColor];

但最终这取决于你自己的喜好。


3
2018-06-09 12:36



我同意一行评论,我经常看到这种方式,你最终趟过嵌套括号和方法调用试图弄清楚发生了什么!点符号与否,干净的书面代码是首要任务。 - Simon Lee


您也可以使用以下语法在括号内进行转换,并为自己保留一行或两行:

[(UITableView*) self.view setSeparatorColor:[UIColor redColor]];

0
2017-12-24 04:53



要么 ((UITableView *)self.view).separatorColor = [UIColor redColor] - rid
@rid是的,这也有效。但是,多个括号可能会让人感到困惑。 - Jay Q.