理解iOS的应用程序的MVC架构模式(2)

2、委托(delegate)

"委托"是一种简单而强大的设计模式,它可以让程序中的一个对象和另一个对象交互。例如对象A是对象B的委托即B.delegate=A,那么对象B就通过它的属性delegate发送消息给对象A即[[B delegate] message],实质上就是对象B让对象A执行message,而message的定义是在A中实现,但对象A何时执行message是由对象B来控制的。

举一个例子,对象A通过segue展现对象B,对象B再通过delegate释放自己。

对象A中的代码如下:
/*使用prepareForSegue传递数据*/
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"objectBView"]) {
        objectBViewController * objectBController=[segue destinationViewController];
        objectBController.u01=self.usernameInput.text;
        objectBController.u02=self.passwdInput.text;
       
        /*设置 被展现视图控制器的委托 为 正展现的视图控制器,即自身*/
        objectBController.delegate=self;
    }
}

/*实现协议中的方法*/
-(void)objectBViewControllerDone:(objectBViewController *)controller username:(NSString *)username passwd:(NSString *)passwd
{   
    [self dismissViewControllerAnimated:YES completion:NULL];   
}
注意,因为是在objectBViewController中执行这个方法,所以self还是objectBViewController。

对象B中的代码如下:
- (IBAction)dismissobjectBView:(id)sender
{
    [[self delegate] objectBViewControllerDone:self username:self.username.text passwd:self.passwd.text];
}

再举一个例子,创建一个UITableViews子类,当用户触击某行时,该类没有响应该触击操作的内置方式,因为这种响应责任已经移交给委托,通过委托方法tableView:didSelectRowAtIndexPath: 来处理。这个委托就在UITableViewController类的子类中实现,因此UITableViewController子类必须遵守协议UITableViewDelegate和UITableViewDataSource,实现这两个协议中的必须实现的方法。UITableViewController子类就成了UITableViews子类的委托。


委托在iOS中应用非常广泛,对它理解得越透彻,越有利于提升我们的开发能力。

苹果文档对于delegate 模式的定义如下:
Delegation is a simple and powerful pattern in which one object in a program acts on behalf of, or in coordination with, another object. The delegating object keeps a reference to the other object—the delegate—and at the appropriate time sends a message to it. The message informs the delegate of an event that the delegating object is about to handle or has just handled. The delegate may respond to the message by updating the appearance or state of itself or other objects in the application, and in some cases it can return a value that affects how an impending event is handled. The main value of delegation is that it allows you to easily customize the behavior of several objects in one central object.
 
3、通知

它支持应用程序中的对象的交互,及与iOS系统上其他应用程序通信。对象在通知中心注册为一观察者,视为订阅。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update) name:@"update" object:nil]

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/29d701fa13866ae7acfdf723543d5f90.html