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];
}


原文地址:https://www.cnblogs.com/frankltf/p/7911133.html