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 ...
随机推荐
- python学习三
输入与输出 print()在括号中加上字符串,就可以向屏幕上输出指定的文字. >>>print('hello world')hello world print()函数也可以接受多个字 ...
- 抓包工具charles的使用
Charles是一款抓包修改工具,数据请求控制容易,操作简单. 下载和安装 首先是工具下载和安装 安装前需要先有Java的运行环境.下载到charles的破解版以后,正常安装.一般破解版里会有char ...
- .NET MVC控制器向视图传递数据的四种方式
.NET MVC控制器向视图传递数据的四种方式: 1.ViewBag ViewBag.Mvc="mvc"; 2.ViewData ViewBag["Mvc"] ...
- 阿里客户端工程师试题简析——Android应用的闪退(crash)分析
1. 问题描述 闪退(Crash)是客户端程序在运行时遭遇无法处理的异常或错误时而退出应用程序的表现,请从crash发生的原因分类与解决方法.在出现crash后如何捕捉并分析异常这两个问题给出自己的解 ...
- IT男的”幸福”生活"续4
翻来翻去,总是睡不觉.大脑口一堆问题.一个又冒出一个,没完没了.明天该怎样去进行下一步呢.. ….. 夜一下子深黑很多,窗外的公路,时而有货车通过,动不动按喇叭,而我住在二楼,真它的吵.也许她住在五楼 ...
- Java并发编程-ConcurrentHashMap
特点: 将桶分段,并在某个段上加锁,提高并发能力 源码分析: V put(K key, int hash, V value, boolean onlyIfAbsent) { lock(); try { ...
- 网页爬虫--scrapy进阶
本篇将谈一些scrapy的进阶内容,帮助大家能更熟悉这个框架. 1. 站点选取 现在的大网站基本除了pc端都会有移动端,所以需要先确定爬哪个. 比如爬新浪微博,有以下几个选择: www.weibo.c ...
- How to set China Azure Storage Connection String
Configure Visual Studio to access China Azure Storage Open Visual Studio 2012, Server Explorer Add n ...
- Deep Learning 论文解读——Session-based Recommendations with Recurrent Neural Networks
博客地址:http://www.cnblogs.com/daniel-D/p/5602254.html 新浪微博:http://weibo.com/u/2786597434 欢迎多多交流~ Main ...
- 每天一个linux命令(8):cat 命令
cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1.命令格式: cat [选项] [文件] ...