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

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

委托模式的好处在于:

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

iOS-设计模式之代理反向传值的更多相关文章

  1. ios 得用代理反向传值

    应用场景:有时时候从界面A跳转到界面B,界面B在返回的时候须要将处理的结果传递给A. 实现思路:1,定义一个负责传值的协义,界面A拥有该协义属性,并实现该协义中的方法 2.界面B也拥有该协义属性(代理 ...

  2. OC10_代理反向传值

    // // ProtectedDelegate.h // OC10_代理反向传值 // // Created by zhangxueming on 15/6/24. // Copyright (c) ...

  3. iOS 代理反向传值

    在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳转到界面B,在界面B的 ...

  4. iOS设计模式之代理模式

    代理模式 基本理解 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 代理模式的应用 远程代理:就是为一个对象在不同的地址空间提供据不代表.这样可以隐藏一个对象存在于不同地址空间 ...

  5. 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值

    实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个 值传递给B类中得某个值(所以需要在B类中先准备一个变量 ...

  6. iOS Block界面反向传值

    在上篇博客 <iOS Block简介> 中,侧重解析了 iOS Block的概念等,本文将侧重于它们在开发中的应用. Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C ...

  7. IOS Block 反向传值

    1.在需要像上一个界面传值的.h 文件实现代理方法 @property (nonatomic, copy) void(^isOpenHandler)(BOOL) ; 2.在执行操作的时候需要江操作的结 ...

  8. 03-UIKit、VC之间正向反向传值、代理

    目录: 一.正向传值 二.反向传值 三.代理模式 回到顶部 正向传值:就是把第一个界面的值传给第二个界面显示,其简单实现方法 1 首先在第一个界面中要有一个textField输入框,一个按钮butto ...

  9. iOS设计模式 - 代理

    iOS设计模式 - 代理 原理图 说明 1. 代理模式大家都用过,但用抽象基类NSProxy实现代理估计鲜有人用 2. 本人用NSProxy实现了代理模式,对于理解消息转发机制有点帮助 源码 http ...

随机推荐

  1. OC基础 单例

    #undef  AS_SINGLETON   #define AS_SINGLETON( __class ) \       + (__class *)sharedInstance;      #un ...

  2. Apache URL转发

    httpd.conf 尾巴加 Alias /web "F:\xampp\htdocs\test/" <Directory "F:\xampp\htdocs\test ...

  3. K-D Tree题目泛做(CXJ第二轮)

    题目1: BZOJ 2716 题目大意:给出N个二维平面上的点,M个操作,分为插入一个新点和询问到一个点最近点的Manhatan距离是多少. 算法讨论: K-D Tree 裸题,有插入操作. #inc ...

  4. ashx中session的使用

    在平常的页面上是用是很容易就的到request,response对像,从而对其进行一些操作,但在ashx(一般处理程序)中却是有一点的不同, 在ashx你无法正常的使用session,即 contex ...

  5. HTML5简介、视频

    HTML5 建立的一些规则: 新特性应该基于 HTML.CSS.DOM 以及 JavaScript. 减少对外部插件的需求(比如 Flash) 更优秀的错误处理 更多取代脚本的标记 HTML5 应该独 ...

  6. 深度学习word2vec笔记之应用篇

    好不容易学了一个深度学习的算法,大家是否比较爽了?但是回头想想,学这个是为了什么?吹牛皮吗?写论文吗?参加竞赛拿奖吗? 不管哪个原因,都显得有点校园思维了. 站在企业的层面,这样的方式显然是不符合要求 ...

  7. Driver Signing changes in Windows 10

    Driver Signing changes in Windows 10 RATE THIS 1 Apr 2015 1:28 PM  39 Beginning with the release of ...

  8. GetSystemTime API可以得到毫秒级时间

    用Now返回的日期格式中年只有2位,即2000年显示为00, 这似乎不太令人满意. 此外Now和Time都只能获得精确到秒的时间,为了得到更精确的毫秒级时间,可以使用API函数GetSystemTim ...

  9. 【转】Java基本数据类型

    原文网址:http://blog.csdn.net/bingduanlbd/article/details/27790287 Java语言是静态类型的(statical typed),也就是说所有变量 ...

  10. JS 实现 startWith endWith函数

    String.prototype.startWith = function(s) { if (s == null || s == "" || this.length == 0 || ...