zoukankan      html  css  js  c++  java
  • 协议(protocol) & 委托(delegate)

    协议(protocol),就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。
    
    委托(delegate),顾名思义就是委托别人办事,就是当 一件事情发生后,自己不处理,让别人来处理。
    
    举个浅显的例子:
               我上班的工作主要内容包括 (1)写代码(2)写文档(3)测试程序(4)接电话(5)会见客户
    (1)(2)我自己全权负责,但是后面(3)(4)(5)我不想或者不方便自己做,所以我想找个助手(delegate)帮我做这些事,于是我定了一个招聘要求(Protocol),里写明我的助手需要会做(3)(4)(5)这三件事。很快,我招到一个助手。
            即:我.delegate = 助手;
    于是以后每当我遇到需要测试程序或者接电话的活,我就把他转交给助手(delegate)去处理,助手处理完后如果有处理结果(返回值)助手会告诉我,也许我会拿来用。如果不需要或者没有结果,我就接着做下面的事。。
    
     协议(protocol),是通过网络,计算机使用者进行通讯后,互相进行约定规定的集合。两个类进行通讯,用协议就比较方便。
         1.协议声明了可以被任何类实现的方法
         2.协议不是类,它是定义了一个其他对象可以实现的接口
         3.如果在某个类中实现了协议中的某个方法,也就是这个类实现了那个协议。
         4.协议经常用来实现委托对象。一个委托对象是一种用来协同或者代表其他对象的特殊对象。
         5:委托,就是调用自己定义方法,别的类来实现。
         6.新特性说明
             @optional预编译指令:表示可以选择实现的方法
             @required预编译指令:表示必须强制实现的方法
    
    代码示例:
    1、ContactsCtrl.h
    
    #import <UIKit/UIKit.h>
    
    //定义协议
    @protocol ContactCtrlDelegate
    -(void)DismissContactsCtrl;
    @end
    
    @interface ContactsCtrl : UIViewController {
        IBOutlet UINavigationBar *ContactNavBar;
        id <ContactCtrlDelegate> delegate;
    }
    @property (nonatomic, assign) id <ContactCtrlDelegate> delegate;
    
    
    -(IBAction)canCelBtn:(id)sender;
    @end
    
    
    2、ContactsCtrl.m
    
    @implementation ContactsCtrl
    @synthesize delegate;
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        ContactNavBar.topItem.prompt = @"选取联系人发送短信";
    }
    
    
    //调用协议中的方法
    -(IBAction)canCelBtn:(id)sender{
        [delegate DismissContactsCtrl];
    }
    
    
    3、ProtocolDemoCtrl.h
    
    #import <UIKit/UIKit.h>
    #import "ContactsCtrl.h"
    @interface ProtocolDemoCtrl : UIViewController <ContactCtrlDelegate>{//添加委托
        ContactsCtrl *contactsView;
    }
    
    
    4、ProtocolDemoCtrl.m
    
    #import "ProtocolDemoCtrl.h"
    #define BARBUTTONADD(SELECTOR) [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:SELECTOR] autorelease];
    
    @implementation ProtocolDemoCtrl
    @synthesize contactsView;
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.navigationItem.rightBarButtonItem = BARBUTTONADD(@selector(addContactAction:));
    }
    
    
    - (void)addContactAction:(id)sender{
        ContactsCtrl *contactView = [[ContactsCtrl alloc] initWithNibName:@"ContactsCtrl" bundle:nil];
        self.contactsView = contactView;
        contactsView.delegate = self;//设置委托
        [self presentModalViewController:contactsView animated:YES];
        [contactView release];    
    }
    
    
    //实现ContactCtrlDelegate协议中的方法
    -(void)DismissContactsCtrl{
        [contactsView dismissModalViewControllerAnimated:YES];
    }

    原文来自:http://lizi464789754.blog.163.com/blog/static/168937085201121963817496/
  • 相关阅读:
    BUUCTF--[GUET-CTF2019]number_game
    36D杯CTF Re WP
    BUUCTF--[GWCTF 2019]re3
    虎符网络安全赛道 Re Game
    Python ZIP压缩文件破解
    合唱队, 华为
    字符串排序, 华为
    称砝码, 华为
    迷宫问题, 华为
    Sudoku , 华为
  • 原文地址:https://www.cnblogs.com/wenxp2006/p/2514808.html
Copyright © 2011-2022 走看看