Dot notation vs square brackets and casting in Objective-C
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 we开发者_如何学Goird 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.
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 things
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.
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.
You can also cast within the bracket and save yourself a line or two using this syntax:
[(UITableView*) self.view setSeparatorColor:[UIColor redColor]];
精彩评论