ios delegate, block, NSNotification用法
ios中实现callback可以通过两种方法,委托和NSNotification
委托的话是一对一的关系,例如一个UIViewController里有一个tableView, 将该viewController设置为tableView的委托,tableView执行的时候调用委托的函数,同时可能需要得到反馈,比如tableView通过调用delegate中rowsOfSections函数来得到该tableView的行数,调用委托函数的时候也可能不需要反馈,例如UIApplication的在AppDelegate中的生命周期函数,还有UIScrollView的didScroll之类委托函数。委托的意思是有些方法不在类本身实现,而是在另一个类中实现。
NSNotification的话是一对多的关系,notification发出去以后发送方就不管了,接不接收以及接收后做什么发送方就不管了。
委托的实现:
一般来说通过delegate来实现,但是apple引入block后通过block也可以实现委托。二者区别是,如果有一堆接口的话可以用delegate,例如UITableView的delegate,因为它需要通过委托知tableView有多少个section,每个section有多少row,每个row的cell是什么;但是如果是调用方和block的执行结果有直接因果关系,用block就比较合适,例如UIView animation方法中的complete block,动画结束后直接执行block中的逻辑,当然complete block也可以通过delegate实现,实现方法是给UIView设定一个delegate,动画结束后UIView调用delegate中的方法。
ps:delegate实现的过程中需要指定的类来实现特定的protocol。
block, 本质是封装了一段代码,可以被当做对象使用(可以定义成Property)。
ios delegate, block, NSNotification用法的更多相关文章
- iOS中block的用法 以及和函数用法的区别
ios中block的用法和函数的用法大致相同 但是block的用法的灵活性更高: 不带参数的block: void ^(MyBlock)() = ^{}; 调用的时候 MyBlock(); 带参数的 ...
- iOS中Block的用法,举例,解析与底层原理(这可能是最详细的Block解析)
1. 前言 Block:带有自动变量(局部变量)的匿名函数.它是C语言的扩充功能.之所以是拓展,是因为C语言不允许存在这样匿名函数. 1.1 匿名函数 匿名函数是指不带函数名称函数.C语言中,函数是怎 ...
- IOS开发Block详细用法
Block简介: ios4.0系统已开始支持block,在编程过程中,blocks被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数 ...
- ios基础篇(十八)——Delegate 、NSNotification 和 KVO用法及其区别
一.Delegate Delegate本质是一种程序设计模型,iOS中使用Delegate主要用于两个页面之间的数据传递.iphone中常用@protocol和delegate的机制来实现接口的功能. ...
- iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)
iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值) 使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: ...
- ios Block详细用法
ios Block详细用法 ios4.0系统已开始支持block,在编程过程中,blocks被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数的 ...
- iOS中Block的基础用法
本文简介 本章不会对Block做过多的实现研究.只是讲解基本的用法.纯粹基础知识.结合实际项目怎么去做举例.Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等.用过GCD就知道 ...
- ios delegate 和 block
//委托的协议定义 @protocol UpdateDelegate <NSObject> - (void)update; @end @interface Test : NSObject ...
- iOS 中Block以及Blocks的使用,闭包方法调用
OC: -(void)dataWithUrl:(NSString*)string AndId:(NSInteger)id returnName:(void(^)(NSString*name))back ...
随机推荐
- systemtap折腾笔记
在这货上花费了不少时间,都是受了@agentzh 大神的蛊惑:) 他写的nginx-systemtap-toolkit监测的数据很有价值,对于系统优化实在是利器. 最早折腾systemtap,是在Ub ...
- Understanding Linux /proc/cpuinfo
http://www.richweb.com/cpu_info A hyperthreaded processor has the same number of function units as a ...
- C# 反射遍历对象
在项目中需要遍历各种对象,可以通过如下方法遍历. /// <summary> /// 返回对象字符串 /// </summary> /// <param name=&qu ...
- ListView中itemz中控件的点击事件和条目点击事件冲突
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- wordpress(二)wordpress环境迁移
迁移wordpress到服务器 本地环境如下 win8.1 appser 服务器环境如下 centos7 lnmp 1.使用phpmyadmin备份本地wordpress站点的数据库 2.备份本地wo ...
- 利用pt-deadlock-logger监控死锁
Percona提供的percona-toolkit提供很多实用功能,这里着重介绍如何监控死锁. pt-deadlock-logger基本用法 Usage: pt-deadlock-logger [OP ...
- Java加密算法 RSA
Java加密算法 RSA 2015-06-06 08:44 511人阅读 评论(0) 收藏 举报 分类: JAVA(57) 公钥加密也称为非对称加密.速度慢.加密和解密的钥匙不相同,某一个人持有私 ...
- Microsoft .NET Framework NGEN是神马东东?
简单的说,如果你的程序是基于.net framework的托管代码的话,NGEN服务能让你的程序第二次打开的速度变快. 赶脚是非常pad化的一项服务. http://msdn.microsoft.co ...
- mysql 启动 pid报错解决方法
在安装好mysqld的时候 启动的时候报错如下: [root@ mysql]# service mysqld start Starting MySQL.The server quit without ...
- JS教程:获取当前地址栏URL
URL即:统一资源定位符 (Uniform Resource Locator, URL) 完整的URL由这几个部分构成:scheme://host:port/path?query#fragment s ...