iOS 代理与block 逆向传值 学习
一般在项目中出现逆向传值的时候就需要用到代理、block 或者通知中心了。由于公司的项目底层封装的很好,所以项目做了三四个月就算碰到需要逆传的情况也不用自己处理。但是最近遇到了一个特别的情况就需要自己处理一下了,之前也在网上看了一下关于如何选择代理、block 或者通知中心。个人感觉代理和通知中心都比较简单,block稍为有点复杂。代理大家都会用,所以当时就选用了通知中心来处理。之后有一次公司的网实在太差了,出现了逆传数据失败的情况,引起了我的注意,打上断点之后才发现,通知中心的那个方法完全没有调用,猛然一想才记起,公司的控制器是自己写的,在离开当前控制器的时候,已经解绑了,一般都是默认在销毁的时候才去解绑,可能公司是全局处理在离开画页的时候就这样处理了,
后面想用一下block这种看起来高档的做法,而且也比代理写起来简单。其实说起block也简单,就三步骤,定义block属性,调用block,设置block内容。
当然代理我们用起来更简单,因为太熟悉了,后一个控制器设置一个协议,设置一个delegate,,在前一个控制器跳转到后一个控制器的时候,指定后一个控制器的代理为前一个控制器,然后前一个控制器遵守协议,再实现这个协议里的方法,在这个方法里会有后一个控制器传过来的数据。
再理理block的顺序吧。
定义block,设置block, 调用block
定义block和调用block是在一个位置的
设置block在另一个位置
那么在哪里定义这个block,在哪里调用呢
要传递出数据的控制器的h文件中要定义这个block属性并且用copy,至于为什么用copy,好像是不用copy的话,block就在栈区,过了就销毁了,用了copy之后block就移到了堆上,就相当于对象了,大概是这个意思。
在要传递数据的控制器定义block属性,然后,这个block属性是否有控制器(另一个控制器)设置这个block。
为什么另一个控制器要设置这个block,在要传递数据的控制器定义block属性里一般都会把要传递的数据,当然参数传到block中,然后另一个控制器只有在设置这个block时,才能把这个传递过来的在block中的当作参数的数据,进行操作,比如设置到自己的控件,属性上。
传递数据方,定义block属性,判断自己的block属性是真(有值,即被数据接收方设置把传递出的数据设置在自己)
数据接收方,设置这个block,把block中的参数(传递的数据)处理到适合的地方(控件显示,子控件分发,属性保存再次处理)
iOS 代理与block 逆向传值 学习的更多相关文章
- iOS-Block总结 && 全面解析逆向传值
1.block的特点: block是C语言: block是一种数据类型.可以当做参数,也可以用做返回值:--总之,对比int的用法用即可(当然,定义的时候,最好跟函数对比): ...
- swift-delegate(代理)或者block传值
1:delegate或者block传值 import UIKit class ViewController: UIViewController,TestDelegatePassValueDelegat ...
- iOS开发系列-Block
概述 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想到在C函数中,我们可以定义一个指向函数的指针并且调用. #im ...
- iOS 开发之Block
iOS 开发之Block 一:什么是Block.Block的作用 UI开发和网络常见功能的实现回调,按钮事件的处理方法是回调方法. 1. 按钮事件 target action 机制. 它是将一 ...
- IOS中的Block与C++11中的lambda
ios中的block 可以说是一种函数指针,但更确切的讲,其实际上其应该算是object-c对C++11中lambda的支持或者说是一个语言上的变体,其实际内容是一样的,C++的lambda我已经有简 ...
- 代理和block反向传值
代理传值: // SendViewController.h #import <UIKit/UIKit.h> @protocol SendInFor <NSObject> -(v ...
- QF——iOS代理模式
iOS的代理模式: A要完成某个功能,它可以自己完成,但有时出于一些原因,不方便自己完成.这时A可以委托B来帮其完成此功能,即由B代理完成.但是这个功能不是让B随随便便任其完成.此时,会有一个协议文件 ...
- iOS安全些许经验和学习笔记
http://bbs.pediy.com/showthread.php?t=209014 标题: [原创]iOS安全些许经验和学习笔记作者: MonkeyKey时间: 2016-03-30,16:32 ...
- iOS开发关于Block代码错误
本文永久地址为http://www.cnblogs.com/ChenYilong/p/4052362.html ,转载请注明出处. iOS开发关于Block代码错误 Incompatible bloc ...
随机推荐
- 虚拟现实的三维时态GIS模式研究
- iBatis.Net(C#)SQL数据映射
转载请注明 http://www.cnblogs.com/13590/archive/2013/03/01/2938126.html 摘要:本文探讨了iBatis.Net框架的XML数据映射文件各配置 ...
- 在ASP.Net和IIS中删除不必要的HTTP响应头
引入 每次当浏览器向Web服务器发起一个请求的时,都会伴随着一些HTTP头的发送.而这些HTTP头是用于给Web服务器提供一些额外信息以便于处理请求.比如说吧.如果浏览器支持压缩功能,则浏览器会发送A ...
- 淘宝账号基于OAuth2.0的登录验证授权登陆第三方网站
首先得有一个注册的appkey和App Secret 该流程分三个步骤: 第一步:通过用户授权获取授权码Code: 第二步:用上一步获取的Code和应用密钥(AppSecret)通过Https P ...
- 基于Flot可放缩的折线图
Flot初步 Flot是一个免费开源的图标插件,可以用它开发出功能强大的图表系统.下面着重讲解在Asp.net中如何使用这个插件做出功能强大的图表应用. 关于Flot,可以在这里查看现有的例子(或者是 ...
- github上一款特别的侧滑
知识分享: 首先看图,我只是大自然的搬运工,想实现这种特效的请点击连接下载github地址忘掉了,....http://download.csdn.net/detail/lj419855402/860 ...
- LeetCode:Gray Code(格雷码)
题目链接 The gray code is a binary numeral system where two successive values differ in only one bit. Gi ...
- EF实体框架之CodeFirst三
前两篇博客学习了数据库映射和表映射,今天学习下数据库初始化.种子数据.EF执行sql以及执行存储过程这几个知识. 一.数据库初始化策略 数据库初始化有4种策略 策略一:数据库不存在时重新创建数据库 D ...
- spring+mybatis实现读写分离
springmore-core spring+ibatis实现读写分离 特点 无缝结合spring+ibatis,对于程序员来说,是透明的 除了修改配置信息之外,程序的代码不需要修改任何东西 支持sp ...
- linux上svn版本库创建小记
[新建svn仓库] 先创建一个文件夹mkdir /opt/svn/wechat; 然后创建svn版本库 svnadmin create /opt/svn/wechat; [创建用户组权限 ...