Исходя из фона Java, я до сих пор не совсем понимаю семантику методов Objective-C, в отличие от их синтаксиса. Возьмем в качестве примера следующий метод:Семантика Objective-C методы
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
Прост достаточно. Существует метод с именем numberOfSectionsInTableView, который принимает параметр UITableView и возвращает NSInteger. Теперь, как насчет этих методов:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
Как следует интерпретировать эти методы? Я наткнулся на три возможных объяснения:
1) Все три метода называются tableView, и они перегружены различными параметрами. Это кажется маловероятным, поскольку люди говорят о «вызове метода numberOfRowsInSection».
2) Методы названы numberOfRowsInSection, heightForRowAtIndexPath и cellForRowAtIndexPath, а Tableview является артефактом вследствие делегирования. В этом случае синтаксически означает, что таблица tableView? Если формат метода: '(return) name: parameters, где tableView подходит?
3) Поскольку Objective-C использует передачу сообщений, неправильно думать о методах. Скорее подумайте о передаче сообщений непосредственно объекту. Другими словами, если объект получает сообщения с именем tableView и numberOfRowsInSection, он знает, что выполняет определенную часть кода. Если это так, вопрос имеет значение? Проходит numberOfRowsInSection и Tableview так же, как проходя Tableview и numberOfRowsInSection?
Собственно, нет. В Objective-C имя метода является селектором. Методы называются «методами». Подпись относится к имени метода и типам аргументов. – JeremyP
@JeremyP: подпись метода не знает имени метода – user102008