• Objective-C 协议简介+委托的实现


    简单的介绍

    1.1定义协议:

    创建一个.h文件

      1: _MyProtocolName.h
      2: @protocol MyProtocolName <NSObject>
    
    
    
      3: @end 

    注:协议中没有变量;

    <NSObject>是代表在此声明的协议是NSObject协议的衍生协议(不是NSObject类);

    1.2使用协议:

      1: @interface CustomView:UIView<MyProtocolName> 

    代表CustomView遵循我们制定的这个协议,需要实现协议的方法

    1.3用协议修饰变量:

    如果这样定义一个变量:

      1:   id<MyProtocolName>myNewVariable;

    那么myNewVaiable是遵循我们制定的这个MyProtocolName协议的

    如果定义函数时:

      1: - (void) doSomethingWithThisObject: (id<MyProtocolName>) aObject

    那么这个函数的参数是需要遵循我们制定的这个MyProtocolName协议的

    ============接下来看下如何利用协议实现委托=========

    目的:将A的事情委托给B来做
     步骤1.在A中声明协议,即要委托出去的事情(方法)。
     步骤2.A中声明一个委托对象,即要委托给谁去办,用id<协议名字>委托对象名;
     步骤3.比如想让B做A的事情,那么B的interface中要宣布自己遵循A中制定的那个协议。
     步骤4.A调用委托执行那件事情去.即[delegate fun]

    A.h------------------------------------------------

    @protocol Mydelegate//协议的声明

    -(void)Fun;

    @end

    @interface A:NSObject

    {

       id<Mydelegate> delegate;//声明一个委托对象,我们要把事情委托给实现Mydelegate协议的类

    }

    @property(assign,nonatomic) id<Mydelegate> delegate;

    @end

    A.m---------------------------------------------

    @implementation

    -(void)init

    {

        delegate = B;

    }

    -(void)FunToOther

    {

        [delegate Fun];//将消息发送给委托去处理

    }

    @end

    委托对象的实现

    B.h---------------------------------------------

    #import"A.h"

    @interface B:NSObject<MyDelegate>

    @end

    B.m---------------------------------------------

    @implementation

    -(void)fun

    {

        //实现Mydelegate中制定的方法

    }

    @end

    这样的话A就可以委托B去做fun这件事情了。

    Reprinted from: http://www.cppblog.com/cokecoffe/archive/2012/05/05/173717.html

  • 相关阅读:
    python-pytest学习(四)-fixture简介
    python-pytest学习(三)-setup/teardown
    python-pytest学习(二)-执行用例规则
    Vue 之五 生命周期钩子函数 自定义指令 过滤器
    Vue 之四 Swiper
    Vue 之三局部组件与全局组件
    Vue 之三 与后端交互
    有关于mysql面试的小故事
    Vue 基础之二
    kubernetes
  • 原文地址:https://www.cnblogs.com/fjfhxotfl/p/3603711.html
Copyright © 2020-2023  润新知