zoukankan      html  css  js  c++  java
  • ios--->OC中Protocol理解及在代理模式中的使用

    OC中Protocol理解及在代理模式中的使用

    Protocol基本概念
    • Protocol翻译过来, 叫做”协议”,其作用就是用来声明一些方法;
    Protocol(协议)的作用
    • 定义一套公用的接口(Public)

      • @required:必须实现的方法,默认在@protocol里的方法都要求实现。
      • @optional:可选实现的方法(可以全部都不实现)
    • 委托代理(Delegate)传值

      • 它本身是一个设计模式,它的意思是委托别人去做某事。
      • 比如:两个类之间的传值,类A调用类B的方法,类B在执行过程中遇到问题通知类A,这时候我们需要用到代理(Delegate)。又比如:控制器(Controller)与控制器(Controller)之间的传值,从C1跳转到C2,再从C2返回到C1时需要通知C1更新UI或者是做其它的事情,这时候我们就用到了代理(Delegate)传值;
    protocol和继承区别
    • 继承之后默认就有实现, 而protocol只有声明没有实现
    • 相同类型的类可以使用继承, 但是不同类型的类只能使用protocol
    • protocol可以用于存储方法的声明, 可以将多个类中共同的方法抽取出来, 以后让这些类遵守协议即可
    运用实例
    //1.定义协议类
    #import <UIKit/UIKit.h>
    @class XMGCartItem,XMGCartCellTableViewCell;
    
    @protocol XMGCartCellTableViewDelegate <NSObject> // 定义协议
    -(void)winecelladdfun:(XMGCartCellTableViewCell *)cell; //协议方法
    -(void)winecellreduesfun:(XMGCartCellTableViewCell *)cell;//协议方法
    
    @end
    
    @interface XMGCartCellTableViewCell : UITableViewCell
    @property(nonatomic,strong)XMGCartItem *winecell;
    @property(nonatomic,weak)id<XMGCartCellTableViewDelegate>delegate;  //协议属性
    @end
    
    //2.协议类中何时调用协议方法
    #import "XMGCartCellTableViewCell.h"
    #import "XMGCartItem.h"
    @interface XMGCartCellTableViewCell ()
    
    @end
    
    @implementation XMGCartCellTableViewCell
    
    - (void)awakeFromNib {
        [super awakeFromNib];
    
    }
    
    - (IBAction)reducebtn:(UIButton *)sender {
    //开始调用协议方法
        if([self.delegate respondsToSelector:@selector(respondsToSelector:)]){
            [self.delegate winecellreduesfun:self];
        }
    }
    @end
    
    
    //3.某类遵守协议并实现协议
    @interface XMGCartViewController () <XMGCartCellTableViewDelegate>
    @end
        //协议实现
    #pragma XMGCartCellTableViewDelegate
    -(void)winecelladdfun:(XMGCartCellTableViewCell *)cell
    {
        int totalmoney=self.totalmoney.text.intValue + cell.winecell.money.intValue;
        self.totalmoney.text=[NSString stringWithFormat:@"%d",totalmoney];
    }
    
    
    
  • 相关阅读:
    安装node.js webkit环境[一]
    wpf 窗口最小化后,触发某事件弹出最小化窗口并置顶
    c# 旋转图片 无GDI+一般性错误
    类库里面添加日志记录 log4net
    string转xml
    DES c#加密后java解密
    使用排序字典排序
    怎么让一段xml被识别为字符串
    新装iis 页面503错误 DefaultAppPool停止解决方案
    hession
  • 原文地址:https://www.cnblogs.com/frankltf/p/7911133.html
Copyright © 2011-2022 走看看