卓敦的面试之旅总结-iOS面试题(二)

1、结构体和类的区别

答:
1、结构体只能封装属性,类可以封装属性和方法
2、结构体变量分配在栈,类变量在堆,栈的空间相对堆来说是比较小的,所以如果是少量属性的话,定义在结构体里面,访问效率会高一点
3、结构体不能继承,类可以继承

2、通知和kvo的区别

答:
kvo是给指定对象添加监听属性后,属性变化后回调出来的一种通知机制,属于主动通知。
通知是手动去发送的一种通知机制,属于被动通知。

3、kvo如何工作

答:
在程序运行时,kvo会给监听的类创建一个派生类,并用该类的isa指针指向该派生类,重写了该属性的setter方法,当属性变化的时候,就会调用_NSSetValueObjectAndNotify方法来回调告诉你已改变

4、什么是kvc

答:
一种键值编码,可以通过字符串来访问对象的属性。也可以通过字符串对对象的属性的赋值。kvc会比直接访问属性要性能更高,因为kvc有缓存机制,对于重复访问的属性会有缓存,从而减少消息发送和开销。
kvc第一次的访问跟直接访问属性一样的,只不过有个缓存机制,下次就不需要直接访问setter和getter。
kvo就是基于kvc的原理去工作的

5、block如何修改外部变量

答:用__block修饰,目的是为了让外部变量在block内变成可变

6、block和Swift的闭包

答:
我感觉是一样的东西,Swift的闭包是非逃逸的,函数执行完就释放了,如果需要设置逃逸,需要是代码中用@escaping修饰。block是逃逸的,函数执行完还存在。

7、什么是组件化、怎么做组件化

答:
组件化就是将项目拆分成若干个独立的模块,可以独立运行调试和部署。
可以通过基于target-action的方式(CTMediator),或者基于router的方式(MGJRouter,HHRouter)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容