这些Objective C方法样式之间有什么区别?

fiz*_*uzz 2 iphone objective-c

在Objective C中似乎有两种标准的方法来编写方法,我不能完全理解它们的区别是什么以及为什么使用它而不是使用另一种方法.例如,来自UIWebViewDelegate:

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

}

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

}
Run Code Online (Sandbox Code Playgroud)

为什么不将第二个简单地写为webViewDidFailLoadWithError,或者为什么第一个不匹配第二个样式?

另一个例子,这次来自UITableViewDataSource:

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


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么numberOfSectionsInTableView不遵循与其他方法相同的格式?

如果这是一个非常简单的问题,我很抱歉 - 这只是困扰我一段时间了,我想在脑海中清楚地说清楚!

在此先感谢您的帮助.

Ole*_*ann 7

这一切都归结为争论的数量.几乎每个委托方法都将方法的发送方作为其第一个参数传递.如果该方法不需要进一步的参数,则方法签名采用第一种方式,否则它位于第二种方式中,遵循Cocoa约定来命名每个参数.

不幸的是,在最后一个参数之后,不可能在方法签名中附加更多文本.如果是的话,我相信Apple宁愿命名这个方法- (void) webView:(UIWebView *)webView didFinishLoad.

编辑:最近在Stack Overflow上有一个关于这个语法决定历史的有趣讨论:为什么Objective-C方法名称的最后一部分需要一个参数(当有多个部分时)?甚至连Objective-C的创造者布拉德·考克斯也插手了.