对Objective-c委托的理解
来源:互联网 发布:什么是事件驱动编程 编辑:程序博客网 时间:2024/06/04 20:06
http://blog.csdn.net/ma52103231/article/details/7564314
之前看过相关的内容,当时自以为明白了。因为人笨,再加上理解的不是很深,所以用不出来啊。只好再找篇文章看看了。
百度了一下,拜读了上面这篇文章。也做个记录,希望原创作者不要介意。呵呵。
概要:张小姐委托某人李先生去办某件事(时刻牢记这个目的,有助于下面详情的理解)
详情:
1.定义某个协议,预留空的方法。
2.定义李先生类,在李先生类的内部包含协议,并调用协议申明的方法。(李先生,实现了协议声明的方法)
3定义张小姐类型,使张小姐类型遵循前面定义的协议,并在张小姐内部实现协议中的方法。在张小姐的内部实例化李先生,并把张小姐指派给李先生内部的协议,然后由李先生调用在张小姐内部实现的协议方法。
算了,我看晕了,感觉是不是lz弄反了啊。罢了,没有去你博客评论,而是在这里背后捅你一刀,是不是不大地道啊。
我直接看代码吧,代码是王道。
- // 定义协议
- #import <UIKit/UIKit.h>
- @protocol NoteDelegate
- //回调函数
- -(void)messageCallBack:(NSString *)string;
- @end
定义一个类,就理解成manager类吧 ,只给人安排活,自己不干活,你看类的名字里面不是有个manager嘛,
- #import <Foundation/Foundation.h>
- #import "NoteDelegate.h"
- @interface ManagerMessage : NSObject {
- id<NoteDelegate> *noteDelegate;
- }
- @property (nonatomic,retain) id<NoteDelegate> *noteDelegate;
- -(void)startThread;
- @end
- #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:@"回调函数"];
- }
- }
看到这里,我懂的差不多了,呵呵,回想起来了。要重点理解这个,我的理解是,这个是被委托者的地址。相当于这里已经安排好,什么时候被执行。下面这个类是真正实现这个方法的,真正干活的人。(如果说,真是先生小姐那一套的话,这个应该是正在干活的先生。)
- #import <UIKit/UIKit.h>
- #import "NoteDelegate.h"
- @interface IphoneDeleteViewController : UIViewController <NoteDelegate>{
- IBOutlet UITextField *textView;
- }
- @property (nonatomic,retain) UITextField *textView;
- @end
- #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
ManagerMessage *message=[[ManagerMessage alloc] init]; //再这里把老板,通灵出来,实例化。
message.noteDelegate=self; //因为之前已经继承了协议,有当奴才的资格,所以把自己的地址,告诉老板,跟老板说,协议里面的活,我来干吧
[message startThread]; //老板执行了这个方法,这个方法调用了startThread,里面有一个noteDelegate messageCallBack,这里的
noteDelegate当然就是self啦,也就是当前类,于是就执行了当前类中的回调函数。
在我看来,楼主虽然犯了点小错误,但是瑕不掩瑜,希望能帮助到大家,以及加深自己对委托的理解。有说的不对的,请批评指正,在下初学菜鸟一枚,请多多指教。
- 对Objective-c委托的理解
- 对Objective-c委托的理解
- 对Objective-c委托的理解
- 对Objective-c委托的理解
- objective-c delegate 委托 代理 的理解
- objective-c 委托的理解与应用
- 对C#中委托的理解
- 对委托的理解
- objective-c的简单委托
- 我对委托的理解
- 对委托的一些理解
- 自己对委托的理解
- 对委托的简单理解
- 对事件委托的理解
- 对Objective-C的runtime的一些理解
- 我对Objective C的一些基础理解(第一版)
- 黑马程序员_对objective C 点语法的理解
- Objective-C之我对Runtime的理解(二)
- C# yield关键字
- 不适用变量实现c语言的strlen函数
- 邂逅的工具软件,有时间再去尝试!
- 一种简单的本地cache的实现
- 无向图基本算法 -- 遍历及最小生成树算法
- 对Objective-c委托的理解
- 1. objC 动态类型(dynamic typing)
- 有向图基本算法 -- 遍历算法
- 编程心得
- 自定制VS插件(一)--LearnVSXNow! - #1: 如何开始VS扩展包(VSX/VS SDK)的编程?
- Rabin-Miller概率素数检验算法
- C++编程必备
- Hello, MYSQL FULLTEXT SEARCH
- HDU 4262 Juggler (模拟+线段树优化)