前言:最近闲暇之余看一些面试题,当做是一种提升吧,随手记录下,若有侵权,立即删除
1.为什么说OC是动态语言
OC类的类型和数据变量的类型都是在运行时才确定的,而不是在编译的时候确定的。如:多台特征,我们可以使用父类指针来指向子类对象,并且可以调用子类的方法。比如以下:
UILabel *lab = [AllMyLab init]alloc];//AllMyLab继承于UILabel
lab就可以掉用 AllMyLab 中的方法。
因为运行时(runtime)特性,我们可以动态的添加方法,或替换方法。
如人和动物都可继承eat方法
2.什么是runtime,一般在什么时候运用。
是什么
(1)字面上说,运行时。
(2)具体的说是一套比较底层的纯C语言API,属于一个C语言库
(3)平时编写的OC代码,在程序运行过程中,其实最终都是转成了runtime的C语言代码,runtime算是OC的幕后工作者
什么时候用
1.将某些OC代码转为运行时代码,探究底层,比如block的实现原理(上边已讲到);
2.拦截系统自带的方法调用(Swizzle 黑魔法),比如拦截imageNamed:、viewDidLoad、alloc;实现方法交换
3.实现分类也可以增加属性;
4.实现NSCoding的自动归档和自动解档;
5.实现字典和模型的自动转换。(MJExtension)
6.(kvo是使用runtime实现)
7用于封装框架
头文件 <objc/runtime.h> <objc/message.h>
相关函数 objc_msgSend:给对象发送消息 class_copyMethodList:遍历某个类所有的方法 class_copylvarList:遍历某个类所有的成员变量
3.MVC和MVVM,MVP
MVC:简单的来说,就是Model数据、View视图、Controller数据进行分层,实现代码解耦。
MVVC:是Model-View-ViewMode模式的简称。由Model数据、View视图、ViewModel视图模型 三部分组成。比MVC更加释放控制器臃肿,将一部分逻辑(耗时,公共方法,网络请求等)和数据的处理等操作从控制器搬运到ViewModel中。
MVVM的特点:
(1)低耦合。View可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
(2)可重用性。可以把一些视图的逻辑放在ViewModel里面,让很多View重用这段视图逻辑。
(3)独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel)。设计人员可以专注于界面(View)的设计。
(4)可测试性。可以针对ViewModel来对界面(View)进行测试。
MVP全名是Model-view-presenter,是使用者界面设计模式的一种。
Model 定义使用者界面所需要被显示的数据模型,一个模型包含着相关的业务逻辑。
View 视图为呈现使用者界面的终端,用以表现来自 Model 的数据,和使用者命令路由再经过 Presenter 对事件处理后的数据。
Presenter 包含着元件的事件处理,负责检索 Model 取得数据,和将取得的数据经过格式转换与 View 进行沟通。
MVP 设计模式通常会再加上 Controller 做为整体应用程序的后端程序工作。
4.进程和线程的区别和联系?
(1)开启一个app叫一个进程,开启app中的一个功能算一个线程。
(2)一个线程只能属于一个进程,而一个进程可以有多个线程,且一个进程最少有一个线程。
5.为什么代理要用weak?代理的delegate和dataSource有什么区别?block和代理的区别?
为什么代理要用weak? 防止循环引用。例如View有一个协议,需要一个代理实现回调。一个Controller添加这个View,并且遵守协议,成为View的代理。如果不用week,用strong,Controller ->View -> delegate -> Controller,就循环引用了。
代理的delegate和dataSource有什么区别? delegate偏重于与用户交互的回调,有那些方法可以供我使用,例如UITableviewDelegate;dataSource偏重于数据的回调,view里面有什么东西,属性都是什么,例如UITableviewDatasource;
block和代理的区别?
https://www.jianshu.com/p/6bba9b4a25d5
网友评论