iOS 面试之Block

转自:http://blog.csdn.net/xunyn/article/details/11658261

1 什么是block

对于闭包(block),有很多定义,其中闭包就是能够读取其它函数内部变量的函数,这个定义即接近本质又较好理解。对于刚接触Block的同学,会觉得有些绕,因为我们习惯写这样的程序main(){ funA();} funA(){funB();} funB(){.....}; 就是函数main调用函数A,函数A调用函数B... 函数们依次顺序执行,但现实中不全是这样的,例如项目经理M,手下有3个程序员A、B、C,当他给程序员A安排实现功能F1时,他并不等着A完成之后,再去安排B去实现F2,而是安排给A功能F1,B功能F2,C功能F3,然后可能去写技术文档,而当A遇到问题时,他会来找项目经理M,当B做完时,会通知M,这就是一个异步执行的例子。在这种情形下,Block便可大显身手,因为在项目经理M,给A安排工作时,同时会告诉A若果遇到困难,如何能找到他报告问题(例如打他手机号),这就是项目经理M给A的一个回调接口,要回掉的操作,比如接到电话,百度查询后,返回网页内容给A,这就是一个Block,在M交待工作时,已经定义好,并且取得了F1的任务号(局部变量),却是在当A遇到问题时,才调用执行,跨函数在项目经理M查询百度,获得结果后回调该block。
2 block 实现原理
Objective-C是对C语言的扩展,block的实现是基于指针和函数指针。
从计算语言的发展,最早的goto,高级语言的指针,到面向对象语言的block,从机器的思维,一步步接近人的思维,以方便开发人员更为高效、直接的描述出现实的逻辑(需求)。
下面是两篇很好的介绍block实现的博文
iOS中block实现的探究
谈Objective-C Block的实现
3 block的使用
使用实例
cocoaTouch框架下动画效果的Block的调用
使用typed声明block
typedef void(^didFinishBlock) (NSObject *ob);
这就声明了一个didFinishBlock类型的block,
然后便可用
@property (nonatomic,copy) didFinishBlock  finishBlock;
声明一个blokc对象,注意对象属性设置为copy,接到block 参数时,便会自动复制一份。
__block是一种特殊类型,
使用该关键字声明的局部变量,可以被block所改变,并且其在原函数中的值会被改变。
4 常见系列面试题
面试时,面试官会先问一些,是否了解block,是否使用过block,这些问题相当于开场白,往往是下面一系列问题的开始,所以一定要如实根据自己的情况回答。
1 使用block和使用delegate完成委托模式有什么优点?
首先要了解什么是委托模式,委托模式在iOS中大量应用,其在设计模式中是适配器模式中的对象适配器,Objective-C中使用id类型指向一切对象,使委托模式更为简洁。了解委托模式的细节:
iOS设计模式----委托模式 
使用block实现委托模式,其优点是回调的block代码块定义在委托对象函数内部,使代码更为紧凑;
适配对象不再需要实现具体某个protocol,代码更为简洁。
2 多线程与block
GCD与Block
使用 dispatch_async 系列方法,可以以指定的方式执行block
GCD编程实例
dispatch_async的完整定义
void dispatch_async(
dispatch_queue_t queue,
dispatch_block_t block);
功能:在指定的队列里提交一个异步执行的block,不阻塞当前线程
通过queue来控制block执行的线程。主线程执行前文定义的 finishBlock对象
dispatch_async(dispatch_get_main_queue(),^(void){finishBlock();}); 

转载于:https://www.cnblogs.com/fisland/p/4318127.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当安全遇到大数据 “永恒之蓝”也将无所遁形!

文章讲的是当安全遇到大数据 “永恒之蓝”也将无所遁形!5月12日,席卷全球的勒索病毒“永恒之蓝”让全世界都为之震动,这是迄今为止全球最大规模的勒索病毒网络攻击,100多个国家受到病毒感染,国内中石油、公安内网、高校…

[ES] 安装

1.ElasticSearch安装的准备工作 Linux:CentOS6.4 Elasticsearc:elasticsearch-2.2.0 JDK:jdk-7u79-linux-x64 IK:1.8.0 MAVEN:apache-maven-3.3.3-bin 2.配置网络静态文件 虚拟机设置桥接模式 配置:vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVIC…

语言基础之description方法

1.description方法的一般用处 1: // 指针变量的地址 2: NSLog("%p", &p); 3: // 对象的地址 4: NSLog("%p", p); 5: // <类名&#xff1a;对象地址> 6: NSLog("%", p); 1: Class c [Person class]; 2: …

亚信安全协助绿谷制药确保“秘方”安全

近几年&#xff0c;我国医药生物技术发展态势迅猛&#xff0c;加强知识产权保护己成为当务之急。为确保制药配方数据和生产管理信息系统安全&#xff0c;上海绿谷制药有限公司采用亚信安全服务器深度安全防护系统&#xff08;Deep Security&#xff09;和亚信安全防毒墙网络版&…

mysql判断叠字_格律诗的八大语法特点

古风的语法&#xff0c;本来就和散文的语法大致相同&#xff0c;直到近体诗&#xff0c;才渐和散文不同&#xff0c;原因是&#xff0c;首先在区区五字或七字之中&#xff0c;要施展丰富的想象&#xff0c;不能不力求简洁&#xff0c;凡可省去而不至于影响语意的字&#xff0c;…

旅游行业春节档期的大数据营销

本文讲的是旅游行业春节档期的大数据营销,虽然我国是以传统农耕文化为主导的社会&#xff0c;每逢春节讲究返乡团聚。但现代化的城市文明更是对很多人的生活方式产生了影响&#xff0c;特别是生活在大城市中的年轻人&#xff0c;以及由年轻人构成的小家庭来说&#xff0c;春节的…

openwrt lamp

https://applefreak111.wordpress.com/2013/03/12/howtoopenwrt-lamp-stack%E5%AE%89%E8%A3%9D/opkg update安裝Lighttpd, MySQL 5, 和PHP 5。opkg install lighttpd lighttpd-mod-cgi lighttpd-mod-fastcgivi /etc/lighttpd/lighttpd.confcgi.assign ( “.php” > “/usr/…

MySQL本天早上8点到明早8点_似乎找到 OSChina 早上 8 点钟容易宕机的原因

最近一段时间&#xff0c;OSChina 网站在早上 8 点出头的时候很容易因为数据库连接池爆满而导致网站宕机。表现的情况是数据库处理大量的查询&#xff0c;堆积大量并发连接&#xff0c;导致无法再连接到数据库&#xff0c;执行一个简单的查询速度也非常慢&#xff0c;数据库机器…

基于Eclipse搭建STM32开源开发环境

最近项目不忙&#xff0c;想着没事看看简单的嵌入式&#xff0c;弄弄物联网什么的。于是就从廉价的STM32开刀了。因为一直是做PC软件开发的&#xff0c;那VS的智能感知那叫一个爽啊&#xff0c;相比之下&#xff0c;觉得这个Keil简直就像文本编辑器一样low。于是想换一个开发环…

数据中心不再有空调、风扇等冷却装置会怎样?

数据中心的变革有望依赖移动设备实现&#xff0c;手机里轻便设备或将成为下一代数据中心的基础设施&#xff0c;服务Google和Facebook等大型的应用程序服务企业。同时&#xff0c;这种商业模式也会构建新一代企业的发展形态&#xff0c;为初创企业带来前所未有的机遇。 CSDN大数…

.NET 数据库缓存依赖策略实现

处理大型门户网站 一般都需要 使用缓存技术这个web加速器在 PHP 和 java 一般 使用的是 基于squid 来做. 当然在 windows .NET 平台也是可以的 squid有 windows版本.这个以后再去研究,现在 就介绍一下 .NET 自带的 缓存策略.Microsoft的petshop就用到了它;  一、基于数据库触…

大数据面临的挑战:当大数据遭遇云计算

本文讲的是大数据面临的挑战&#xff1a;当大数据遭遇云计算,大数据正在彻底改变IT世界。那么&#xff0c;什么样的数据谈得上数据呢? 根据IDC的报告&#xff0c;未来十年全球大数据将增加50倍。仅在2011年&#xff0c;我们就将看到1.8ZB(也就是1.8万亿GB)的大数据创建产生。这…

Climbing Stairs - Print Path

stair climbing&#xff0c; print out all of possible solutions of the methods to climb a stars, you are allowed climb one or two steps for each time; what is time/space complexity? &#xff08;use recursion&#xff09; 这道题难是难在这个ArrayList<Strin…

java 单例设计_Java 之单例设计模式

设计模式: 对问题行之有效的解决方式, 其实它是一种思想.单例设计模式解决的问题:就是可以保证一个类在内存中的对象唯一性. 即单个实例.比如对于A 和 B 两个程序使用同一个配置信息对象时, A 对配置信息作出修改, B 也与之对应的更新配置信息, 即需要保证该对象的唯一性.如何保…

Javascript之RegExp

RegExp对象的构造器 new RegExp(pattern[, flags]) pattern 正则表达式文本flags 该参数可以是下面几个值的任意组合&#xff1a;g 全局匹配i 忽略大小写m 让开始和结束字符&#xff08;^ 和 $&#xff09;工作在多行模式&#xff08;也就是&#xff0c;^ 和 $ 可以匹配字符串中…

DS汽车通过采用沉浸式虚拟现实技术实现展厅转型

PSA集团&#xff08;PSA Group&#xff09;旗下的高端品牌DS汽车公司&#xff08;DS Automobiles&#xff09;采用达索系统的“虚拟车库&#xff08;Virtual Garage&#xff09;”行业解决方案为全新的SUV车型DS 7 CROSSBACK提供全面支持&#xff0c;推动其展厅转型&#xff0c…

java 日历记事本_calendar 一个用java编写的日历记事本. 具有正常日历功能;也可以用于在不同日期记录下当日重要的事情 - 下载 - 搜珍网...

日历记事本/日历记事本/build/classes/日历记事本/CalendarPad$1.class日历记事本/日历记事本/build/classes/日历记事本/CalendarPad.class日历记事本/日历记事本/build/classes/日历记事本/Month.class日历记事本/日历记事本/build/classes/日历记事本/NotePad.class日历记事…

要的需求 ip提取网站源码带采集 要求是PHP源码

求。ip提取网站源码带采集 要求是PHP源码。必须带采集类似 小峰IP提取网站&#xff0c;安小莫IP提取&#xff0c;迷惘IP提取&#xff0c;冰封IP提取免费类型的 不要淘宝类型的 200 转载于:https://www.cnblogs.com/PS-apple/p/4342866.html

设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类

1 单例模式简单介绍 单例模式是一种经常使用的软件设计模式。在它的核心结构中仅仅包括一个被称为单例类的特殊类。通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问。从而方便对实例个数的控制并节约系统资源。假设希望在系统中某个类的对象仅仅能存…

java 跳转action_JS 跳转到指定Action | 学步园

最近项目需要在JS中跳转到指定的Action。通过不断的实验和查资料&#xff0c;终于成功。Java SSH2 架构下&#xff0c;正常 配置Action完毕。在xxx.jsp下window.location" ";例如&#xff1a;window.location" /user/ResAction> ";其中ResAction是配置文…