Исходя из фона Java, я до сих пор не совсем понимаю семантику методов 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 ? Если формат метода - «(возвращаемое) имя: параметры», куда вписывается tableView ?
3) Поскольку Objective-C использует передачу сообщений, неправильно думать о методах. Скорее подумайте о передаче сообщений объекту напрямую. Другими словами, если объект получает сообщения с именами tableView и numberOfRowsInSection , он знает, что нужно выполнить определенную часть кода. Если это так, имеет ли значение порядок? Передает numberOfRowsInSection и tableView то же самое, что и передача tableView и numberOfRowsInSection ?