YHM-iOS面试题

2019-06-22  本文已影响0人  行走在北方

1、假如Controller太臃肿,如何优化
1.将网络请求抽象到单独的类中
方便在基类中处理公共逻辑;
方便在基类中处理缓存逻辑,以及其它一些公共逻辑;
方便做对象的持久化。
2.将界面的封装抽象到专门的类中
构造专门的 UIView 的子类,来负责这些控件的拼装。这是最彻底和优雅的方式,不过稍微麻烦一些的是,你需要把这些控件的事件回调先接管,再都一一暴露回 Controller。
3.构造 ViewModel
借鉴MVVM。具体做法就是将 ViewController 给 View 传递数据这个过程,抽象成构造 ViewModel 的过程。
4.专门构造存储类
专门来处理本地数据的存取。
5.整合常量

作者:iOS猿_员
链接:https://www.jianshu.com/p/80090864f325
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
2、讲讲队OC的runtime的理解,为什么说OC是动态运行时语言
runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API。
在我们平时编写的OC代码中, 程序运行过程时, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者 。
动态。 主要是将数据类型的确定由编译时,推迟到了运行时。
3、isa指针的作用
isa:是一个Class 类型的指针. 每个实例对象有个isa的指针,他指向对象的类,而Class里也有个isa的指针, 指向meteClass(元类)。元类保存了类方法的列表。当类方法被调用时,先会从本身查找类方法的实现,如果没有,元类会向他父类查找该方法。同时注意的是:元类(meteClass)也是类,它也是对象。元类也有isa指针,它的isa指针最终指向的是一个根元类(root meteClass).根元类的isa指针指向本身,这样形成了一个封闭的内循环。
作者:natewang
链接:https://www.jianshu.com/p/05fecee74e97

4、讲讲你开发中遇到的crash,怎么快速发现,怎么解决

1、数组越界导致的崩溃。-[__NSArrayI objectAtIndex:]: index 100 beyond bounds [0 .. 99]'
2、数据集合类型,如字典、数组中插入元素时,插入空指针nil。
3、调用当前对象类中不存在的方法导致崩溃。
'-[AppDelegate button1]: unrecognized selector sent to instance 0x8c764c0'
4、数据接收时,服务器返回数据不规范,如字典或数组元素中存在null,且客户端没做处理导致的崩溃。
5、内存管理不当,向野指针发送消息导致的崩溃。
6、一些masonry布局有问题
一般报错为:EXC_BAD_ACCESS

作者:SuperBoy_Timmy
链接:https://www.jianshu.com/p/adca91242113
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

5、讲讲对block的认识,block的修饰语是什么,为什么有的需要用weak有的不需要
Block 是一个里面存储了指向定义 block 时的代码块的函数指针,以及block外部上下文变量信息的结构体。
简单来说就是:带有自动变量的匿名函数。
用 weak 修饰的Block 存放在栈区,属于 StackBlock
注意:Block 引用普通外部变量,都是在栈区创建的,只是用 strong、copy 修饰的 Block 会把它从栈区拷贝到堆区一份,而 weak 修饰的 Block 不会;
6、讲讲你对APP架构的理解
https://www.jianshu.com/p/0ea6b72ea1a3
7、请简述你在iOS开发过程中遇见最大的技术问题,难点是什么,怎么解决的
皆出自网络,学习使用,如果有问题请私聊

上一篇下一篇

猜你喜欢

热点阅读