Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between these Objective C method styles?

There seems to be two standard ways of writing methods in Objective C, and I can't quite grasp what the difference is and why one is used rather than the other. For example, from the UIWebViewDelegate:

- (void)webViewDidFinishLoad:(UIWebView *)webView {

}

- (void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {

}

Why isn't the second one simply written as webViewDidFailLoadWithError, or why doesn't the first one match the second style?

Another example, this time from UITableViewDataSource:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 0;
}

How come numberOfSectionsInTableView doesn't follow the same format as the other methods?

I'm sorry if this is a very simple question - it's just been bugging me for a while now and I'd like to get it clear in my head!

Thanks in advance for your help.

like image 531
fizzbuzz Avatar asked Mar 23 '26 20:03

fizzbuzz


2 Answers

It all comes down to the number of arguments. Pretty much every delegate method passes the sender of the method as its first argument. If the method does not need further arguments, the method signature is in the first style, otherwise it is in the second, following the Cocoa convention to name each argument.

Unfortunately, it is not possible to append more text to a method signature after the last argument. If it were, I am sure Apple would rather name the method - (void) webView:(UIWebView *)webView didFinishLoad.

Edit: There was an interesting discussion recently here on Stack Overflow on the history of this syntax decision: Why must the last part of an Objective-C method name take an argument (when there is more than one part)? where even Brad Cox, creator of Objective-C, chimed in.

like image 157
Ole Begemann Avatar answered Mar 25 '26 11:03

Ole Begemann


You can have multiple web views or table views on the screen at the same time. During a callback of the methods you listed, you can take a look at the web views or table views' tag property to decide which web view or table view is responsible for such a call back.

like image 39
Di Wu Avatar answered Mar 25 '26 10:03

Di Wu



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!