委托模式 delegate
是Cocoa中十分常见的设计模式,通常使用协议 protocol
来实现。
使用delegate就可以让单继承的子类实现父类之外的方法,这与Java中的接口机制非常类似。
或者可以说一个类想实现某些操作,它可以把这些操作的实施细节委托给另外一个类来完成。
一个简单的例子如下:
@protocolPrintDelegate<NSObject> - (void)print; @end @interfaceAClass:NSObject<PrintDelegate> @propertyid<PrintDelegate> delegate; @end @implementationAClass -(void)sayHello { [self.delegateprint]; } -(void)print { NSLog(@"Do Print"); } @end // 使用 AClass intmain(intargc,constchar* argv[]) { @autoreleasepool{ AClass * a = [AClass new]; a.delegate= a; [a sayHello]; } return0; }
这里对象a的delegate可以设置为任何实现了 PrintDelegate
协议的对象。
一个常见的应用场景,AView中包含了BView,而BView需要修改AView的界面,大致的步骤如下:
定义一个协议,在AView中实现协议的方法
BView中设置一个委托变量
把BView的委托变量设置为AView,就是BView委托AView去办事
事件发生后,用委托变量调用AView中的协议方法