• 青海“天然林管护+生态扶贫” 5517万亩天然林得到保护 2019-04-18
  • 生活-热门标签-华商生活 2019-04-18
  • 文化山西:风华长城岁月歌 2019-04-16
  • 中华龙舟大赛福州站收官 黑马异军突起摘大满贯 2019-04-16
  • 台湾布袋戏大师陈锡煌的两岸缘 2019-04-13
  • 老师:讲课再累都不怕 就怕各级搞检查讲课再累都不怕-教育时讯 2019-04-13
  • 行业变革中的房产经纪公司加盟暗战 ——凤凰网房产深圳 2019-03-31
  • 图解:习近平出席博鳌亚洲论坛2018年年会前瞻 2019-03-19
  • 外贸创新举措 让开放惠及世界 2019-03-15
  • 记者带你逛CES:体验未来科技 2019-03-14
  • 我的中国医改建议,彻底解决看病难看病贵 2019-03-14
  • 海空联合演练相关新闻 2019-01-05
  • 登录 立即注册
    金钱:

    广州快乐十分开奖记录

    山西官方下载快乐十分:iOS开发—block十个面试题总结 [复制链接]

    2019-3-4 20:02
    _小迷糊 阅读:267 评论:0 赞:0
    Tag:  

    广州快乐十分开奖记录 www.2hyn.net 1、 什么是block?
    block是对象,它封装了一段代码,这段代码可以在任何时候执行。block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。与代理协议的功能一样,也可以用于事件通信。

    2、 使用block和使用delegate完成委托模式有什么优点?
    使用block实现委托模式,其优点是回调的block代码块定义在委托对象函数内部,使代码更为紧凑;
    适配对象不再需要实现具体某个protocol,代码更为简洁。

    3、多线程与block
    GCD与Block
    使用 dispatch_async 系列方法,可以以指定的方式执行block
    GCD编程实例
    dispatch_async的完整定义
    ?? void dispatch_async(
    ?? dispatch_queue_t queue,
    ?? dispatch_block_t block);
    功能:在指定的队列里提交一个异步执行的block,不阻塞当前线程

    4、 _block和__weak修饰符的区别?
    ? __block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。
    ? __weak只能在ARC模式下使用,也只能修饰对象,不能修饰基本数据类型。
    ? __block对象可以在block中被重新赋值,__weak不可以。

    5、Block不允许修改外部变量的值,这里所说的外部变量的值,指的是栈中指针的内存地址。__block 所起到的作用就是只要观察到该变量被 block 所持有,就将“外部变量”在栈中的内存地址放到了堆中。进而在block内部也可以修改外部变量的值。

    6、block引用变量
    局部非对象
    ·block引用局部变量时,该变量会作为常量编码到block块中。
    ·局部变量需要使用__block修饰,才能在block块中修改
    局部对象
    ·在 block 里面引用一个局部的Objective-C 对象的时候,该对象会被 retain。
    ·如果局部变量使用__block修饰,则不会被retain。
    实例对象
    ·?? ?在 block 里面引用一个实例变量时,该实例对象会被 retain。

    7、什么时候Block会出现循环引用,如何解决?
    ·在 block(点语法)里面引用一个实例变量时,该实例对象会被 retain。
    .A对象申明调用block,B对象实现block,并且在实现中调用了A对象
    ·如上规则容易导致循环引用。

    8、 block在ARC中和传统的MRC中的行为和用法有没有什么区别,需要注意些什么?
    (1)、在使用block前需要对block指针做判空处理。
    不判空直接使用,一旦指针为空直接产生崩溃。
    (2)、在MRC的编译环境下,block如果作为成员参数要copy一下将栈上的block拷贝到堆上,//MRC下:_sucBlock = [callbackBlock copy]; 不copy block会在栈上被回收。
    (3)、在block调用之后要对block指针做赋空值处理,如果是MRC的编译环境下,要先release掉block对象。
    A对象申明调用block,B对象实现block,并且在实现中调用了A对象,此时需要在A对象调用完block后附空
    (4)、使用方将self或成员变量加入block之前要先将self变为__weak
    (5)、在多线程环境下(block中的weakSelf有可能被析构的情况下),需要先将self转为strong指针,避免在运行到某个关键步骤时self对象被析构。

    9、GCD跟Block使用需要注意什么?
    GCD使用注意点:
    防止死锁
    GCD不能控制最大任务并发量(无法决定具体开多少子线程,只能由系统决定)
    GCD的请求一旦发送,无法直接取消

    Block使用注意点:
    防止循环引用
    在block中用到外部变量都是只读拷贝的
    栈block超过作用域就被自动释放了
    堆block需要手动释放

    10、Block在ARC跟MRC中的行为和用法有什么区别?
    相同点
    block的本质一样, 都是函数指针
    使用__block都可以解决在block中修改外部变量的问题

    不同点
    解决循环引用的方式不同
    MRC中使用__block
    ARC中使用 __weak
    block用什么属性修饰,为什么?

    在MRC中, 定义Block属性时, 应该用copy修饰
    在ARC中, 定义Block属性时, 系统会自动将其copy, 即复制到堆上. 但习惯上还是会用copy修饰
    用copy修饰的原因
    block创建时默认是创建在栈上的, 超过作用域后就会被销毁, 只有使用copy才会生成一个堆block, 在作用域外被访问

    金三银四即将来临,找工作和面试又被提上了日程,为了解决小伙伴们的燃眉之急,小编特地为大家整理了一份BAT面试题,需要的可以加小编的QQ群:923910776 希望对大家有所帮助,后期会不断更新添加新的面试题,可以帮大家查漏补缺。

    分享到:
    我来说两句
    facelist
    您需要登录后才可以评论 登录 | 立即注册
    所有评论(0)
    关闭

    每日头条

    通过邮件订阅最新 Code4App 信息
    上一条 /4 下一条
    联系我们
    关闭
    合作电话:
    13802416937
    Email:
    [email protected]
    商务市场合作/投稿
    问题反馈及帮助
    联系我们

    广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|Github|申请友链|手机版|广州快乐十分开奖记录 ( 广州快乐十分开奖记录 )

    返回顶部
  • 青海“天然林管护+生态扶贫” 5517万亩天然林得到保护 2019-04-18
  • 生活-热门标签-华商生活 2019-04-18
  • 文化山西:风华长城岁月歌 2019-04-16
  • 中华龙舟大赛福州站收官 黑马异军突起摘大满贯 2019-04-16
  • 台湾布袋戏大师陈锡煌的两岸缘 2019-04-13
  • 老师:讲课再累都不怕 就怕各级搞检查讲课再累都不怕-教育时讯 2019-04-13
  • 行业变革中的房产经纪公司加盟暗战 ——凤凰网房产深圳 2019-03-31
  • 图解:习近平出席博鳌亚洲论坛2018年年会前瞻 2019-03-19
  • 外贸创新举措 让开放惠及世界 2019-03-15
  • 记者带你逛CES:体验未来科技 2019-03-14
  • 我的中国医改建议,彻底解决看病难看病贵 2019-03-14
  • 海空联合演练相关新闻 2019-01-05
  • 北京pk10口诀计划 十一选五前三技巧 手机幸运飞艇开奖直播 生肖福彩开奖结果查询2015127期 排列五走势图带连线图 微信刮刮乐宣传语 爱彩人湖南幸运赛车 8月l号山东群英会开奖 2011体彩排列五走势图 秒速飞艇记录器 生肖时时彩论坛 四川体育彩票 3d乐彩论坛 银河时时彩 j联赛官方网站 6场半全场tuijian