Точечная запись против квадратных скобок и приведение в Objective-C
Что из следующего является лучшей практикой в Objective-C?
UITableView* view = (UITableView*) [self view];
[view setSeparatorColor:[UIColor blackColor]];
[view release];
против
((UITableView*) self.view).separatorColor = [UIColor blackColor];
Или есть лучший способ написать это? self.view
это UIView*
,
Я спрашиваю оба, потому что у меня странно выглядящий актерский состав (может быть, есть лучший способ?) И из-за следующего текста из официальной документации, который намекает, что это больше, чем просто вопрос стиля или личных предпочтений:
Еще одним преимуществом является то, что компилятор может сигнализировать об ошибке, когда он обнаруживает попытку записи в объявленное свойство только для чтения. Если вместо этого вы используете синтаксис в квадратных скобках для доступа к переменным, компилятор - в лучшем случае - генерирует только необъявленный метод, предупреждающий о том, что вы вызвали несуществующий метод сеттера, и код не выполняется во время выполнения.
3 ответа
Ну.... точечная запись в конце сводится к квадратным скобкам, но это зависит от личных предпочтений. Лично я избегаю точечных обозначений, если я не устанавливаю / не обращаюсь к скалярному типу, например, слишком легко взглянуть на следующее...
view.step = 2.0;
... и не знаю, где step является скалярным свойством или имеет метод установки и т. д. Я предпочитаю быть явным и буду использовать...
[view setStep:2.0];
Но опять же личные предпочтения, я думаю.
2 вещи
Вы не спрашивали об этом, но - я любил эти "Одни строки" в начале, но через некоторое время, когда вы возвращаетесь к коду, он становится менее читабельным.
точка кажется мне более читаемой
Я бы предпочел это -
UITableView* view = (UITableView*)self.view;
view.setSeparatorColor=[UIColor blackColor];
Но, в конце концов, это вопрос ваших собственных предпочтений.
Вы также можете привести в скобки и сохранить себе одну или две строки, используя этот синтаксис:
[(UITableView*) self.view setSeparatorColor:[UIColor redColor]];