zoukankan      html  css  js  c++  java
  • iOS-设计模式之代理反向传值

    代理设计模式就是自己的方法自己不实现,让代理对象去实现。

    可以让多个类实现一组方法。

    委托模式的好处在于:

    1、避免子类化带来的过多的子类以及子类与父类的耦合

    2、通过委托传递消息机制实现分层解耦

    代理模式需要注意的地方时设置代理属性的时候不要用strong,而要assigne,或者weak这样可以避免循环引用。

    具体实现过程:

    在需要传值的类中申明协议,设置属性。

    //  SecondViewController.h
    #import <UIKit/UIKit.h>
    
    @protocol delegateName <NSObject>
    
    - (void)sendData:(NSString *)string;
    
    @end
    
    
    @interface SecondViewController : UIViewController
    
    @property (nonatomic, assign)id<delegateName> delegate;
    
    @end
    
    
    
    //  SecondViewController.m
    
    - (IBAction)actionOne:(id)sender {
        //    安全判断,是否实现了sendData:方法
        if ([self.delegate respondsToSelector:@selector(sendData:)]) {
            [self.delegate sendData:self.textfile.text];
        }
        
        [self dismissViewControllerAnimated:YES completion:nil];
    }

    在实现的类中实现代理:

    //  ViewController.m
    #import "ViewController.h"
    #import "SecondViewController.h"
    
    @interface ViewController ()<delegateName>
    @property (weak, nonatomic) IBOutlet UILabel *lable;
    @property (strong, nonatomic)SecondViewController *secondVC;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        self.secondVC = [[SecondViewController alloc]init];
    //    设置代理对象
        self.secondVC.delegate = self;
    
    }
    
    - (void)sendData:(NSString *)string{
        
        self.lable.text = string;
    }

    本文GitHub地址https://github.com/zhangkiwi/iOS_SN_delegate

  • 相关阅读:
    Gecko Bootloader的介绍(Silicon Labs)【一】
    使用模板新建ZigBee工程的方法
    代码控制ZigBee网络密钥的生成
    Ubuntu20编译最新版Android源码教程
    C和C++常用代码片段整理
    Java易错的知识点整理
    仿IntelliJ Darcula的Swing主题FlatLaf使用方法
    PuTTYTabManager汉化版
    WinSCP整合SecureCRT打开终端
    异想家博客图片批量压缩程序
  • 原文地址:https://www.cnblogs.com/zhang-kiwi/p/5020995.html
Copyright © 2011-2022 走看看