看到一篇非常非常好的文章,让你瞬间理解委托是啥。
//
// 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通知观察者。
我的理解完了,不妥之处,还望指正。
今天的文章对Objective-c委托的理解[通俗易懂]分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/58582.html