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)