几个偏基础的面试题

2018-11-16  本文已影响0人  极客夜读

1、iOS本地数据存储都有哪几种方式?

2、深拷贝和浅拷贝的理解?

3、什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储?

4、谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?

我有一个iOS免费内推交流群,群里有群员内推,有面试交流,有技术讨论,有需要的加群:637919808

群内交流情况:

内推


1、iOS本地数据存储都有哪几种方式?

NSKeyedArchiver   

NSUserDefaults

Write写入方式(plist文件、txt文件等)

SQLite3

CoreData

(问题扩展:什么情况下使用什么样的数据存储)

(1)NSKeyedArchiver:采用归档的形式来保存数据,数据对象需要遵守NSCoding协议,对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。缺点:只能一次性归档保存以及一次性解压。所以只能针对小量数据,对数据操作比较笨拙,如果想改动数据的某一小部分,需要解压或归档整个数据。

(2)NSUserDefaults:用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。缺点:如果要存储其他类型,需要转换为前面的类型,才能用NSUserDefaults存储。

(3)Write写入方式:永久保存在磁盘中。第一步:获得文件即将保存的路径:第二步:生成在该路径下的文件:第三步:往文件中写入数据:最后:从文件中读出数据:

(4)SQLite:采用SQLite数据库来存储数据。SQLite作为一中小型数据库,应用ios中,跟前三种保存方式相比,相对比较复杂一些。

(5)CoreData:系统自带的数据库存储。

2、深拷贝和浅拷贝的理解?

对实例进行深拷贝时当前类需要实现NSCopying协议。

浅拷贝是复制出来一个跟原对象相同地址的对象

深拷贝时复制一个跟源对象不同地址的对象 改变源对象对新对象没有影响

3、什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储?

序列化是把对象转化成字节序列的过程  反序列化是把字节序列恢复成对象

将对象写到文件或者数据库里,并且能读取出来

遵循NSCoding协议 实现复杂对象的存储 实现该协议后可以对其进行打包或解包,转化成NSData

4、谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?

好处:

(1)使用线程可以把占据时间长的程序中的任务放到后台去处理

(2)用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

(3)程序的运行速度可能加快

(4)在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。

缺点:

(1)如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。

(2)更多的线程需要更多的内存空间。

(3)线程的中止需要考虑其对程序运行的影响。

(4)通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。

实现多线程的方法:

NSObject类方法

NSThread

NSOperation

GCD

上一篇下一篇

猜你喜欢

热点阅读