iOS&MacMacOS开发 技术集锦

Delegates and Data Sources

2021-04-11  本文已影响0人  ADreamClusive

代理是一个对象,用于代替另一个对象对程序中的事件做出响应,或与另一个对象协作完成事件的响应;委托对象通常是响应者对象:NSResponderUIResponder的子类。
cocoa框架中的UITextField和UITableView都使用了委托机制,这种机制可以使代理对象根据变化协调UI和状态的改变;还可以在不使用继承的情况下改变另一个对象的行为。

委托模式的工作原理

委托模式的机制

委托类需要有一个叫做delegate的属性,同时,在Protocol中声明一些代理方法,代理实现其中需要的方法;

委托消息的形式

代理方法通常的形式为:

委托机制和Application Frameworks

在Cocoa和Cocoa Touch程序中,委托对象通常是一个响应者对象,代理通常是自定义的对象。框架中包含很多委托对象:
NSApplicationNSBrowserNSControlNSDrawerNSFontManagerNSFontPanelNSMatrixNSOutlineViewNSSplitViewNSTableViewNSTabViewNSTextNSTextFieldNSTextViewNSWindow

数据源Data Sources

数据源是数据代理,用于数据控制,而不是用于处理交互。一般由view持有,用于为view提供其所需要的数据;处理view中编辑的数据。数据源负责数据的持有,view仅在需要持有其当前展示需要的数据。

为自定义类实现代理

仅需以下几步:

- (id)delegate;
- (void)setDelegate:(id)newDelegate;
- (id)delegate {
    return delegate;
}

- (void)setDelegate:(id)newDelegate {
    delegate = newDelegate;
}
- (void)someMethod {
    if ( [delegate respondsToSelector:@selector(operationShouldProceed)] ) {
        if ( [delegate operationShouldProceed] ) {
            // do something appropriate
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读