• IOS-OC delegate


    # OC delegate
    * 定义协议:创建一个属性和方法清单
    * 遵守协议:一个类实现某个协议中规定的方法
    * 一个类可以有其他很多属性或方法,可同时实现多个协议的属性和方法清单

    委托类的头文件

    //delegate 使用的前三步(委托者):1.声明 delegate 原型;2.声明 delegate 变量; 3.调用 delegate 方法
    //Delegate.h
    #import <Foundation/Foundation.h>
    @class ClassName;
    @protocol DelegateName <NSObject>
    @optional
    - (void)showName:(NSString*)Name;
    @end

    委托者的头文件

    //ClassName.h
    #import <Foundation/Foundation.h>
    #import "Delegate.h"
    @interface ClassName:NSObject
    //声明delegate 变量
    //委托是弱引用属性,避免对象及其delegate之间产生强引用循环
    @property (nonatomic,weak) id<DelegateName> delegate;
    @end

    委托者在.m文件中使用delegate 中的方法

    //ClassName.m
    #import "ClassName.h"
    @implementation ClassName
    - (id)init{
    self = [super init];
    if(self){
    //
    }
    return self;
    }
    - (void)useDelegate{
    [_delegate showName:@"SherylHan"];
    }

    被委托者实现delegate的方法

    //ClassB.h
    #import <Foundation/Foundation.h>
    #import "Delegate.h"
    //声明ClassB 遵循delegate
    @interface ClassB: NSObject<DelegateName>
    @end

    main.h中设置delegate的值

    //main.h
    #import <UIKit/UiKit.h>
    #import "AppDelegate.h"
    #import "ClassName.h"
    #import "ClassB.h"
    int main(int argc,char *argv[]){
    @autoreleasepool{
    ClassName *cn = [[ClassName alloc]init];
    ClassB *cb = [[ClassB alloc]init];
    //设置delegate的值
    cn.delegate = cb;
    //cn 接到了调用showName的任务,但是自己做不了,于是交给cb去做,但是要是执行这个任务还是要调用声明任务(delegate)的cn
    [cn showName];
    
    return UIApplicationMain(argc,argv,nil,NSStringFromClass([AppDelegate class]));
    }
    }

    被委托者实现delegate的方法

    //ClassB.m
    #import "ClassB.h"
    @implementation ClassB
    - (id) init(){
    self = [super init];
    if(self){
    //
    }
    return self;
    }
    - (void)showName:(NSString*)name{
    NSLog(name);
    }
  • 相关阅读:
    AOP 和 前置通知,后置通知
    使用Spring 简化MyBatis
    核心一:DI
    环境搭建及创建对象方式及赋值(注入)
    核心一:IoC
    Spring框架简介
    判断两个矩形是否相交的4个方法
    计算旋转角度
    浅析adb命令
    如何选择开源许可证?
  • 原文地址:https://www.cnblogs.com/HackHer/p/6065401.html
Copyright © 2020-2023  润新知