FLEX扩展与yapdatabase\keychain初步了解

今天写了两个小东西,都是对FLEX这个强大的debug工具的一个扩展,而且是针对两种数据存储方式的提升
入口处的话只需要在一个类的+load方法时候对FLEXManager进行register,把我们要进行注入的扩展入口加进去(没有具体代码。都在工作机上
首先FLEX是个超强的框架,虽然可能小问题很多,但是代码这种东西嘛,自然是你有多强它就能有多强。FLEX自带对Realm进行视图展示,不过对其他的一些文件格式就没有能够得到很好的数据展示,比如就是我要做的yap和keychain啦
yapdatabase是一个以key进行存储object的数据模型,它原理是对sqlite进行了一层封装。主要操作就是对Yapdatabase shareInstance的三个connection进行两种block操作,connection有分为ui和bk,而block操作分为只读和读写,这就很好的维护了数据的稳定性啦~ 然后在block内有个transaction参数,通过操作transaction来进行key\value的存取。而因为我要做的是能对整个database进行视图展示,所以首先就获得所有的collection,collection可以认为是一种类似于表的东西,甚至可以把每个collection当作一个dictionary进行持久化存取操作~获得所有collection后再取得collection内所有的key,进行视图展示,选择每一个key后都可以获得一个object,然后为了能更好的展示object以及嗯哼偷点懒,用了一个FLEX内的一个controller,它可以对一个object进行很好的ivar\method\description展示。但是呢,FLEX的头文件只暴露了manager,里面的绝大部分类都是私有的,不过这当然面对有黑魔法的oc来说并不是问题,只需要用nsclassforstring就能获取到class然后进行alloc和init了。但是我要调用的这个类好巧不巧只有类方法的初始化,并不能按照习惯性[[class alloc] init],而class默认是没有performselector这个方法的,纠结了一会儿想起来class本身就是一个对象,大概是叫meta class吧,所以在nsclassforstring的结果直接用id指向,这时候就能调用方法了,为了安全起见还加了respondstoselector来预防了一下。不过蛋疼的xcode会提醒你这个selector没有实现过,所以要加一些宏定义。这样yapdatabase的扩展大致就完成了
而keychain项目代码主要是通过uickeychainstore这个库来进行实现的,看了一下核心存储部分,一堆的bridge,都是C呐,所以可见keychain是在corefoundation上进行的处理。存储方式实际上是nsdata,就算是string也是转成nsdata,每次取出也要从nsdata解析出来。具体视图部分逻辑类似。获得keychainstore的service和group,然后遍历所有的key,然后用runtime对点击Object进行黑魔法展示。
yap可以看得出来是对object直接进行存取的一个database,当然可能要加个实现nscopying的前提,对model的支持是很友好的。keychain呢主要是能方便的存取一些简单数据,比如token啊uuid啊(这些往常的都是存userdefault。。
今天还是和往常一样很快的完成了任务然后催着bob给我找事做看到可爱的他为难的样子还是挺有成就的

你可能感兴趣的:(FLEX扩展与yapdatabase\keychain初步了解)