可能重复:
协议和代理之间的区别?
协议和代表之间有什么区别吗?
如果它们相同,为什么我们需要两个做同样的事情呢?
何时使用委托以及何时使用协议.
我是Objective-C和Iphone编程的新手.所以请耐心等待.
我只是真正开始IOS开发,但通过C#开发ASP.net几年.说实话我以前从来没有真正需要理解委托/事件等,我知道我在编写web.forms时使用它们但是很多功能都是由框架在后面处理的,在幕后.
所以现在我正在开发IOS,我不得不试着去理解它们是如何运作的(我在这里假设代理/事件的理论在语言中是相同的,也许我错了).无论如何,IOS中的以下代码行:
if ([self.delegate respondsToSelector:@selector(startImporting:)])
{
[self.delegate startImporting:self];
}
Run Code Online (Sandbox Code Playgroud)
我是否正确地认为,在伪代码中,它意味着以下内容:
如果调用此方法的方法/类中有一个名为'startImporting'的方法,则在调用类中调用方法'startImporting'.
希望很清楚.如果是这种情况,那么它基本上与在C#中使用静态方法相同,你可以调用类似的东西:
myImportClass.startImporting();
Run Code Online (Sandbox Code Playgroud)
大概不是,或者就是这样做.那么,我是否错过了代表们的全部观点,他们的利益等等?我已经读过他们一遍又一遍的内容,虽然它有意义,但它从不点击,我从来没有(无论如何都是网页形式)真正看到了使用它们的好处.
这变得越来越重要,因为我正在使用.net中的lambda表达式,并且它们与C#中的委托密切相关,所以当我可以开始使用它们时,我更愿意知道委托实际上为什么和有什么好处.
如果我有一个UIViewController,我在故事板中连接一个tableView,连接tableview插座,然后通过连接检查器连接数据源和委托方法(cntrl +拖动到vc橙色圆圈图标),我是否还需要添加self.tableView.delegate = self和self.tableView.datasource = self实际的视图控制器?当然在实际的vc中我正在实现tableView数据/委托协议.
此外,我假设答案是什么,同样的方式将集合视图控制器通过故事板连接相同的方式?
添加它的优点和缺点是什么?
class FooController:UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.datasource = self
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { ... }
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { ... }
}
Run Code Online (Sandbox Code Playgroud) 协议或代表与NSNotifications之间有什么区别?什么是"观察者",它是如何运作的?