Dot notation vs square brackets and casting in Objective-C

笑着哭i 提交于 2020-01-22 09:27:09

问题


Which of the following is best practice in Objective-C?

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

vs.

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

Or is there a better way of writing this? self.view is a UIView*.

I'm asking both because I have a weird looking cast (maybe there's a better way?) and because of the following text from the official documentation, which hints that it's more than just a matter of style or personal preference:

A further advantage is that the compiler can signal an error when it detects an attempt to write to a read-only declared property. If you instead use square bracket syntax for accessing variables, the compiler—at best—generates only an undeclared method warning that you invoked a nonexistent setter method, and the code fails at runtime.


回答1:


Well.... dot notation compiles down to square brackets in the end, but it is down to personal preference. I personally avoid dot notation unless I am setting / accessing a scalar type, it is too easy to look at the following for instance...

view.step = 2.0;

... and not know where step is a scalar property, or has a setter method etc. I prefer to be explicit and would use...

[view setStep:2.0];

But again personal preference I guess.




回答2:


2 things

  1. You didn't ask that but - I used to love those "One lines" in the beginning, but after some time when you get back to the code it is less readable.

  2. the dot seems more readable to me

I would prefer that -

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

But in the end it is a matter of your own preferences.




回答3:


You can also cast within the bracket and save yourself a line or two using this syntax:

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


来源:https://stackoverflow.com/questions/6292753/dot-notation-vs-square-brackets-and-casting-in-objective-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!