IOS常用设计模式——委托模式(IOS开发) -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【meiwen.anslib.com - 电脑资料】

    委托模式在之前的博客中用到了很多,比如各种复杂的Cocoa Touch框架的UI控件,几乎都用到了委托来响应控件事件或控制其他对象,

IOS常用设计模式——委托模式(IOS开发)

    委托模式

    -问题:

    处理一切IOS应用都在UIApplication中完成,但是在设计过程中并不友好,它藕合度高,职责不清,难以维护,需要不断不断的重构,因此需要把看似功能很复杂的类分解或者分派成功能明确的类。

    Apple中我们经常用两种类,一个是框架类,各种用,不断的用,啥都能用;另一个就是协议类,就是协议。

    协议的目的,终究是降低一个对象的复杂度和藕合度。框架类经常会生成一个保持对象的指针,并在特定时刻向委托对象发送消息。就像我们常见的“obj delegate = self;”委托对象做些事情或者委托对象控制。

    - 原理:

   

// 委托类PhilosopherDelegate.h@protocol PhilosopherDelegate<NSObject>@required- (void) sleep;- (void) eat;- (void) work;@end// ViewController.h@interface ViewController : UIViewController<PhilosopherDelegate>@end// ViewController.m@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];    Philosopher *obj = [[Philosopher alloc] init];    obj.delegate = self;    [obj start];}#pragma -- PhilosoperDelegate方法实现- (void) sleep{    NSLog(@"Sleep...");}- (void) eat{    NSLog(@"eat...");}- (void) work{    NSLog(@"work...");}@end

    注意,viewDidLoad方法中的obj.delegate = self语句来指定委托对象和通用类的引用关系,

电脑资料

IOS常用设计模式——委托模式(IOS开发)》(http://meiwen.anslib.com)。

    虽然通用类(一般都是UIViewController之类的东东)是UIKit直接提供,但是我们在这个例子中得实现自己的通用类Philosopher,我给出代码,但是真的不是很重要的部分。

   

// Philosopher.h#import "PhilosopherDelegate.h"@interface Philosopher :NSObject{    ...}// 可以保存对象的引用@property (nonatomic, weak) id<PhilosopherDelegate>delegate;- (void) start;- (void) handle;@end// Philosopher.m#import "Philosopher.h"@implementation Philosopher@synthesize delegate;-(void)start{    ...}-(void)handle{    ...}@end

    - 具体应用:太多了,好多空间都有委托,主要负责响应控件事件或控制其他对象。对于那些更复杂的控件,如UITableView,除了要实现委托协议外,还需要实现数据源协议。都是委托设计模式的具体应用。

    委托的方法是可选的,但数据源的方法一般是必须实现的!

最新文章