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();}); 

iOS进阶面试题----Block部分相关推荐

  1. 视频教程-iOS进阶开发-iOS

    iOS进阶开发 毕业于解放军特种作战学院,曾就职广州军区司令部.复原后从事IT行业,涉及逆向,安全,密码学等技术领域.2014年在广州某线下教育机构担任iOS讲师,2015年加入潭州教育集团,潭州iO ...

  2. iOS进阶开发-李文瀚-专题视频课程

    iOS进阶开发-817人已学习 课程介绍         进阶课程涵盖目前iOS开发需要提升和深入研究的基础知识.通过原理讲解,深入理解底层机制.课程答疑讲师QQ:471926977 课程收益     ...

  3. 《招聘一个靠谱的iOS》面试题参考答案(下)

    参考: <招聘一个靠谱的iOS>面试题参考答案(下) <招聘一个靠谱的iOS> 25 _objc_msgForward函数是做什么的,直接调用它将会发生什么? _objc_ms ...

  4. iOS进阶之架构设计MVVM的理解(3)

    iOS进阶之架构设计MVC(1) iOS进阶之架构设计MVP(2) 前言: 前两篇文章已经理解MVC.MVP的设计模式.特别是MVP,比较难以理解,不好把握.需要多多实践,对比.来优化P段,找到最适合 ...

  5. iOS开发面试题整理

    前言 本文借鉴整理了iOS高级开发常见的面试题,并且分博客一一分析,希望能和大家一起进步学习. 欢迎大家关注我的 Github?以及相关博客 Github.io 简书 大家的鼓励是我前进的动力? iO ...

  6. iOS经典面试题总结--内存管理

    内存管理 1.什么是ARC? ARC是automatic reference counting自动引用计数,在程序编译时自动加入retain/release.在对象被创建时retain count+1 ...

  7. 【面试】iOS 开发面试题(二)

    [面试]iOS 开发面试题(二) 1. 我们说的oc是动态执行时语言是什么意思? 答案:多态. 主要是将数据类型的确定由编译时,推迟到了执行时. 这个问题事实上浅涉及到两个概念.执行时和多态. 简单来 ...

  8. 2020,300道高级iOS开发面试题(最新整理)

    这个栏目将持续更新–请iOS的小伙伴关注! 一:知名大厂iOS开发面试题篇 1.腾讯-最新iOS面试题总结 2.百度-最新iOS面试题总结 3.头条-最新iOS面试题总结 4.阿里-最新iOS面试题总 ...

  9. 出一套 iOS 高级面试题

    一千个读者眼中有一千个哈姆雷特,一千名 iOS 程序员心目中就有一千套 iOS 高级面试题.本文就是笔者认为可以用来面试高级 iOS 程序员的面试题. 这套题的题目跟公司和业务都没有关系,而且也并不代 ...

  10. 李洪强iOS经典面试题153- 补充

    李洪强iOS经典面试题153- 补充   补充 有空就来解决几个问题,已经懒癌晚期没救了... UML 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模 ...

最新文章

  1. 职校中的计算机学的是什么,职校计算机专业主要学什么课
  2. (八)流程控制 for标签和if标签
  3. arcgis engine二次开发python-使用C#配合ArcGIS Engine进行地理信息系统开发
  4. node.js async await 配合Promise对象使用
  5. .net千万级数据导出_记一次解决docker下oracle数据库故障事例
  6. FireEye:GreedyWonk行动针对经济和外交政策网站
  7. CH2401 送礼物 双向搜索
  8. skywalking 安装_分布式监控系统SkyWalking
  9. 常见食物营养成分表图_提醒大家;甲状腺结节的“根源”已揭晓,4种常见蔬菜,请趁早列入黑名单...
  10. mysql基础知识(一)
  11. 12月1日struts、spring、hibernate等框架的整合培训日记
  12. QT6安装教程(兼容QT5、QT4)
  13. 微信公众号迁移保持OPENID不变新老账户粉丝迁移问题
  14. php normalize,PHP DOMNode normalize()用法及代码示例
  15. 山城虽寒、但物联却热,探访中移物联小记一笔……
  16. VS2013 OpenCV 2.4.9 “HEAP:Invalid Address specified to RtlValidateHeap( 000D0000, 019FEF18 )” 错误
  17. 基于WebSocket和Redis实现Bilibili弹幕效果
  18. 浅谈研究生对科研工作的那些认知误区
  19. latex调行距_LaTeX 的行距机制
  20. 告别疫情红利Q1同比转亏,声网的护城河为何护不住盈利?

热门文章

  1. mysql数据库MyISAM存储引擎_MySQL数据库MyISAM存储引擎
  2. python中提交post表单_python接口自动化二(发送post请求)
  3. Java Foundation serial ( 一 )
  4. 【机器学习算法实现】主成分分析(PCA)——基于python+numpy
  5. android studio | openGL es 3.0增强现实(AR)开发 (4) 绘制简单的2D图形、显示、旋转
  6. 神经网络与深度学习第6章:循环神经网络 阅读提问
  7. java编译时绑定_为什么Java在编译时绑定变量?
  8. 【BZOJ 1050】1050: [HAOI2006]旅行comf (动态SPFA)
  9. javascript(定时函数)
  10. 【又见LCS】NYOJ-37 回文字符串