• iOS进阶面试题----Block部分


    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实现的博文
     
     
    3 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类型指向一切对象,使委托模式更为简洁。了解委托模式的细节:
    使用block实现委托模式,其优点是回调的block代码块定义在委托对象函数内部,使代码更为紧凑;
    适配对象不再需要实现具体某个protocol,代码更为简洁。
     
     
    2 多线程与block
    GCD与Block
    使用 dispatch_async 系列方法,可以以指定的方式执行block
     
    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();}); 
     
    为了更好点交流和学习,请大家在参阅博客后,留下你的疑问和宝贵意见。谢谢!!!!
  • 相关阅读:
    方维,将采集到的淘宝天猫商品详情里面的链接转换成淘宝客链接
    方维系统,根据关键词、品牌 采集淘宝天猫的商品
    方维系统,评论按钮在没输入内容是虚的不能点击,输入内容选择分类后就可以点击了
    方维模板修改,评论框默认高度是70px,鼠标点击框内后高度增大变为100px
    方维模板修改,发布分享、主题有商品时,标签需自动写到input里,不要再手动去点击添加,手动点击可取消
    只采集淘宝上面包邮的商品,用方维
    Android Application 创建全局变量
    非常优秀的iphone学习文章总结!
    android NDK jni下的c文件 Unresolved inclusion
    Android Service学习笔记
  • 原文地址:https://www.cnblogs.com/fshmjl/p/4831240.html
Copyright © 2020-2023  润新知