看到一篇非常非常好的文章,让你瞬间理解委托是啥。
实现李先生
C申明张小姐,并使之遵循协议
实现张小姐
要实现委托效果,在oc中最要的是,你要遵循某个协议,然后把自己self指派给委托。
//
// NoteDelegate.h
// IphoneDelete
//
// Created by wangjun on 10-9-18.
// Copyright 2010 __MyCompanyName__. All rights reserved.
// 定义协议
#import <UIKit/UIKit.h>
@protocol NoteDelegate
//回调函数
-(void)messageCallBack:(NSString *)string;
@end
B申明李先生
//
// ManagerMessage.h
// IphoneDelete
//
// Created by wangjun on 10-9-18.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "NoteDelegate.h"
@interface ManagerMessage : NSObject {
id<NoteDelegate> *noteDelegate;
}
@property (nonatomic,retain) id<NoteDelegate> *noteDelegate;
-(void)startThread;
@end
实现李先生
//
// ManagerMessage.m
// IphoneDelete
//
// Created by wangjun on 10-9-18.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "ManagerMessage.h"
@implementation ManagerMessage
@synthesize noteDelegate;
//开始一个线程
-(void)startThread
{
[NSTimer scheduledTimerWithTimeInterval:3
target:self
selector:@selector(targetMethod:)
userInfo:nil
repeats:NO];
}
-(void)targetMethod:(NSString *)string
{
if (self.noteDelegate!=nil) {
//完成线程 调用回调函数
[self.noteDelegate messageCallBack:@"回调函数"];
}
}
@end
C申明张小姐,并使之遵循协议
//
// IphoneDeleteViewController.h
// IphoneDelete
//
// Created by wangjun on 10-9-18.
// Copyright __MyCompanyName__ 2010. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "NoteDelegate.h"
@interface IphoneDeleteViewController : UIViewController <NoteDelegate>{
IBOutlet UITextField *textView;
}
@property (nonatomic,retain) UITextField *textView;
@end
实现张小姐
//
// IphoneDeleteViewController.m
// IphoneDelete
//
// Created by wangjun on 10-9-18.
// Copyright __MyCompanyName__ 2010. All rights reserved.
//
#import "IphoneDeleteViewController.h"
#import "ManagerMessage.h"
@implementation IphoneDeleteViewController
@synthesize textView;
//回调函数
-(void)messageCallBack:(NSString *)string
{
self.textView.text=string;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.textView.text=@"测试";
ManagerMessage *message=[[ManagerMessage alloc] init];
//通知调用协议
message.noteDelegate=self;
[message startThread];
[message release];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload {
self.textView=nil;
}
- (void)dealloc {
[self.textView release];
[super dealloc];
}
@end
要实现委托效果,在oc中最要的是,你要遵循某个协议,然后把自己self指派给委托。
好了,文章看完了,我猜你已经有了一些概念与想法了,让我来抽取出其中的关键部分:
协议:NoteDelegate看成C++中的抽象基类
主角:IPhoneDeleteViewController看成C++中的实现类
托管(代理):ManagerMessage看成观察者模式中的被关注的对象
现在,梳理一下流程
现实语义:张小姐家里有一件事要处理,可她现在没办法去办,她就告诉李先生(viewDidLoad发生),要李先生帮忙去办
模式语义:观察者IPhoneDeleteViewController先实现接口NoteDelegate内容,然后注册兴趣事件对象ManagerMessage,如果兴趣事件发生则通知自己,注册过程发生在viewDidLoad函数中。兴趣事件发生后,依据多态特性,调用messageCallBack通知观察者。
我的理解完了,不妥之处,还望指正。