Точечная нотация или квадратные скобки и литье в 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, а код не работает во время выполнения.

Ответ 1

Ну... Точечная нотация в конце концов сводится к квадратным скобкам, но это зависит от личных предпочтений. Я лично избегаю точечной нотации, если я не устанавливаю/не прибегая к скалярному типу, слишком просто взглянуть на следующее, например...

view.step = 2.0;

... и не знаю, где шаг является скалярным свойством или имеет метод setter и т.д. Я предпочитаю быть явным и использовать...

[view setStep:2.0];

Но опять-таки личное предпочтение, я думаю.

Ответ 2

2 вещи

  • Вы не спрашивали об этом, но... Раньше я любил этих "Одних строк" ​​в начале, но через некоторое время, когда вы вернетесь к коду, он становится менее читаемым.

  • точка кажется более читаемой мне

Я бы предпочел, чтобы -

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

Но в конце концов это вопрос ваших собственных предпочтений.

Ответ 3

Вы также можете включить в скобку и сохранить строку или две, используя этот синтаксис:

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