美文网首页
几个偏基础的面试题

几个偏基础的面试题

作者: 极客夜读 | 来源:发表于2018-11-16 12:59 被阅读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

    相关文章

      网友评论

          本文标题:几个偏基础的面试题

          本文链接:https://www.haomeiwen.com/subject/lifmfqtx.html