2017iOS面试经典总结(1)--- iOS 代理,通知,Block

作为我们这个行业,面试对于我们并不陌生,而且作为技术工种,技术面试是面试中的重要环节,我最近会总结一些比较基础但是平时总结较少的面试经典的题。也是全面的学习,也可以让面试的朋友们相互分享交流。
1.三者的传值对应关系。
我们说通知是”一对多”的关系。
而代理和Block通常是”一对一”的关系。
Block的对应关系与代理机制一样,Block更为灵活。

2.通知的释放问题。
我们都知道,通知和定时器,我们需要手动释放,否则会造成内存泄漏,我们看到网上有说通知的释放可以在dealloc方法中进行释放,这个是没有错的,但是在实际的开发中,我们在不同的实际需求,释放的方法是不一样的。
例如:现在A界面是在不断的接受通知。此时A跳到B界面,而在B界面中不需要A通知的事件,如果在A界面中将通知的释放写在dealloc中,跳到B界面,不会执行A界面中的dealloc方法。所以A界面仍然不断的接收着消息。所以这种需求,就应该讲A中的通知释放写在viewDidDisapper方法中。

3.代理和Blcok的修饰关键字
(1)代理的修饰词用weak关键字,为什么不能用strong呢?
答:因为,代理方会强行持有代理属性,而此时代理属性用strong的话,会造成循环引用。用weak解循环
(2)那代理为什么不用assgin关键字呢?
答:因为weak修饰的对象,在释放的时候会被置为nil,而oc向nil发送消息是没问题的,但是用assign就会造成野指针的错误unrecongnized selected send to instance.
(3)为什么Block用copy 关键字?
答:Block在没有使用外部变量时,内存存在全局区,然而,当Block在使用外部变量的时候,内存是存在于栈区,当Block copy之后,是存在堆区的。知道了这些之后,就不难解释为什么Block要用copy修饰,因为存在于栈区的特点是对象随时有可能被销毁,一旦销毁在调用的时候,就会造成系统的崩溃。所以Block要用copy关键字。

4.代理和Block的效率对比。
通过两者关键字的比较,Block的效率会低于代理,因为Block要做栈堆的拷贝。

5.两者对事件的处理对比。
代理更加注重事件的过程,而Block更注重事件处理的结果。

6.使用两者的情形。
在多消息传递的时候,使用代理更清晰,而Block显得不直观也不易维护。
如果委托方向调用多个代理对象的时候,使用Block。因为一个委托对象的代理属性只有一个(weak修饰)。代理修改的是代理本身。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值