Ios 通过委托传递数据
我试图理解在传递数据方面,委托是如何工作的。我认为以下两种说法都是正确的: UITableView示例Ios 通过委托传递数据,ios,objective-c,delegates,Ios,Objective C,Delegates,我试图理解在传递数据方面,委托是如何工作的。我认为以下两种说法都是正确的: UITableView示例 UITableView对象为UITableViewDelegate和UITableViewDataSource定义协议,并且委托可以遵守这些协议。例如,如果在UIViewController中有一个UITableView实例,人们通常会使UIViewController符合UITableViewDataSource,在这种情况下,UIViewController是UITableView的委托。
UITableView
对象为UITableViewDelegate
和UITableViewDataSource
定义协议,并且委托可以遵守这些协议。例如,如果在UIViewController
中有一个UITableView
实例,人们通常会使UIViewController
符合UITableViewDataSource
,在这种情况下,UIViewController
是UITableView
的委托。在此范例中,代理将数据发送回UITableView
UIViewController示例
通常我们需要在UIViewControllers
之间传递数据。一种方法是定义两个UIViewController
之间的委托关系。我们可能有一个ParentViewController
和一个ChildViewController
,我们希望将数据从ChildViewController
发送到ParentViewController
。为了进行设置,我们在ChildViewController
中定义了协议
,并添加了一个委托属性,比如:@property(弱)id delegate代码>。然后,如果我们使用segues,我们可能会执行以下操作:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"childvc"]) {
self.childVC = (ChildViewController *)segue.destinationViewController;
self.childVC.delegate = self;
}
}
然后当ChildViewController
中发生某个事件时,我们调用[delegate sendData]
或类似的方法。在本例中,我们将数据从委托类传递给委托
这些都是在Objective-C中实现委托关系的好方法吗?在我看来,第一个示例是委托模式的主要原因。它源于这样一种想法,即实现委托模式的对象应该是可重用的,并且完全不受上下文的影响,因此根本不需要子类化就可以使用。例如,表视图没有关于它所在应用程序的上下文。基本上,它会对代表说:“嘿,给我在xx行显示的内容”或“嘿,yy行被点击了,我应该突出显示它吗?”。对我来说,这是一种实现可重用对象的好方法,这些对象不需要子类化就可以在不同的应用程序中执行不同的功能。例如,更复杂的UI元素
在第二个示例中,需要在应用程序中的两个自定义类之间进行通信,这也是一个典型的场景。显然,要做到这一点,他们需要就发送什么消息达成一致,并相互参考。原则上,这类似于两个类之间的任何其他消息传递接口,我认为在大多数情况下,没有必要使用委托模式使其复杂化。但是,如果目的是子视图控制器可以重用,并且发现自己是不同父视图控制器类的子视图,那么使用定制协议的委托模式也有意义 第二个是的,第一个我只能说是部分的。第一个是关于UITableViewDelegate
的“经典”委托模式的混合,但是DataSource
更可能是ModelViewController模式的一部分(尽管它使用委托)。我不建议绝对地考虑这种模式。就我的2美分,不要把任何一个都当作确定的事实,因为我喜欢使用模式,不知道它的每一个正确的技术理论术语;)在第一个示例中,DataSource有点不同,但是还有一个UITableViewDelegate。