面试总结 - 缓存机制

缓存可以分为:内存数据缓存,数据库缓存,文件缓存。
每次想获取数据的时候,先检测内存中有无缓存,再检测本地有无缓存(数据库\文件),最终发送网络请求,将服务器返回的网络数据进行缓存(内存,数据库,文件),以便下次读取

缓存机制是二级缓存:内存缓存和本地缓存

归档 解档

让子类遵循NSCoding协议,并实现initWithCoder:以及encodeWithCoder:方法,
这些方法会在程序归解档某个对象的时候被调用。
利用NSKeyedArchiver archiveRootObject:coder toFile:path 进行归档。
利用NSKeyedUnarchiver unarchiveObjectWithFile:path 进行解档

其中遍历要归档类属性的时候,可以利用runtime中class_copyIvarList获取属性数组 和 count个数;
得到数组中对应的ivar 并通过ivar_getName()方法获取对应的key,进而获取对应的value,进行encodeWithCoder归档。

根据对应的key获取需要解档的value,进行initWithCoder解档。

应用在本地数据存储都有什么形式?
    plist:只能存储 NSString  NSDictionary NSArray  NSData NSNumber等基本数据类型,因为这些基本数据类型已经遵守了<NSCoding>协议
    归档:也叫序列化,或是NSCoding,自定义类的对象必须遵守了NSCoding协议并且实现两个协议方法才可以 encodeWithCoder:归档   initWithCoder:解档
    NSUserDefault:本质也是通过plist来存储的
    SQLite3:轻量级数据库
    CoreData:是对SQLite3的封装,更加面向对象,效率没有SQLite3高,苹果官方推出的
    FMDB:第三方框架,它是将比较麻烦的C语言函数封装成OC对象方法。
	Realm

FMDB 优化:

1.不要在多线程下使用FMDatabase,要用FMDatabaseQueue,是串行队列
2.如果执行大量SQLite语句调用,使用事务操作可以提高性能
3.Cached Statement功能是一种提高SQLite数据库访问的技术,在开发中,如果执行的SQL语句大量重复,使用该功能可以提升App性能。但如果不重复,则可以考虑关闭该功能,以节省资源。在FMDB中,开发者可以使用setShouldCacheStatements方法开启或关闭该功能,并使用shouldCacheStatements方法判断状态。当使用完,可以使用clearCachedStatements方法清空缓存。
4.加密,重写open和openWithFlags方法,调用setKey:方法。

FMDB死锁

在一个事务内部,嵌套使用了queue去执行其他任务,造成死锁。
也就是说,串行队列里面串行任务嵌套执行

FMDB使用

FMDatabase:一个FMDatabase对象代表一个单独的SQLite数据库,通过SQLite语句执行数据库的增删改查操作
FMResultSet:使用FMDatabase对象查询数据库后的结果集
FMDatabaseQueue:用于多线程操作数据库,它保证线程安全

FMDatabase
beginTransaction 开启事务
rollback 事务回滚
commit 事务提交

FMDatabaseQueue
inTransaction 直接调用事务的block
在添加失败时*rollback = YES

FMDB的事务

(1) 事务定义:
事务(Transaction)是并发操作的基本单位,是指单个逻辑工作单位执行的一系列操作序列,这些操作要不都成功,要不就不成功,事务是数据库维护数据一致性的单位,在每个事务结束时,都能保证数据一致性与准确性,通常事务跟程序是两个不同的概念,一个程序中包含多个事务,事务主要解决并发条件下操作数据库,保证数据
(2) 事务特征:
原子性(Atomic):事务中包含的一系列操作被看作一个逻辑单元,这个逻辑单元要不全部成功,要不全部失败
一致性(Consistency):事务中包含的一系列操作,只有合法的数据被写入数据库,一些列操作失败之后,事务会滚到最初创建事务的状态
隔离性(Isolation):对数据进行修改的多个事务之间是隔离的,每个事务是独立的,不应该以任何方式来影响其他事务
持久性(Durability)事务完成之后,事务处理的结果必须得到固化,它对于系统的影响是永久的,该修改即使出现系统固执也将一直保留,真实的修改了数据库
(3) 事务语句:
开启事务 :beginTransaction
回滚事务:rollback
提交事务:commit
(4)事务代码
用事务处理一系列数据库操作,省时效率高

发布了218 篇原创文章 · 获赞 19 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/songzhuo1991/article/details/104883672