这边说<UITableViewDataSource,UITableViewDelegate>这个是动态代理的意思 麻烦详细讲下原理 和过程,尤其是动态代理的用法和原理。,然后说明下下面那段代码大概是什么作用? @interface BabyReadViewController ()<UITableViewDataSource,UITableViewDelegate> #pragma mark – TableView – (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section – (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath |
|
50分 |
代理delegate是一种设计模式,oc中的代理是通过协议protocol 来表达的。从“代理”的名字上也可以窥见代理的作用,如tableview的两个代理tableviewdelegate,tableviewdatasource. 在uitableview 控件内我们将数据的提供者,及动作事件的响应者都定义为代理,自己本身没去实现,只提供了接口(交给实现代理的类来扩展), 这样uitableview就可以接收各种各样的数据源及各种各样的不同cell的展现。这就是代理的主要作用,在ios 中我们还通常将代理用于反向值传递。在下面这个帖子中有关于这部分内容的讨论:http://bbs.csdn.net/topics/390986050
|
50分 |
这是delegate模式,在UIKit框架中广泛应用,除了UITableView以外,还有UITextView、UITextField、UIWebView、UIAlert、UIActionSheet、UICollectionView、UIPickerView、UIGestrueRecognizer、UIScrollView等等。
delegate 属于事件驱动的范畴,也就是只有当某一事件触发时,delegate 才被调用,因为委托者不知道谁会去处理以及怎样去处理,而且为了模块之间解耦、易维护,从而引入了delegate模式,比如你使用的TabelView,TableView本身是不知道有多少个Cell的,也不知道Cell如何展示,但是它只用知道有一个委托者已经完成了这些事就可以了。 通常,一个delegate的使用过程,需要经过五步: 1. 创建一个 delegate; 2. 委托者声明一个delegate; 3. 委托者调用delegate内的方法(method); 4. 被委托者设置delegate,以便被委托者调用; 5. 被委托者实现Delegate 所定义的方法。 |