zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
    Codeforces 482E ELCA (LCT)
    Codeforces 798D Mike and distribution (构造)
    AtCoder AGC017C Snuke and Spells
    HDU 6089 Rikka with Terrorist (线段树)
    HDU 6136 Death Podracing (堆)
    AtCoder AGC032D Rotation Sort (DP)
    jenkins+python+kubectl实现批量更新k8s镜像
    Linux 下载最新kubectl版本的命令:
    jenkins X 和k8s CI/CD
  • 原文地址:https://www.cnblogs.com/HackHer/p/6065401.html
Copyright © 2011-2022 走看看