美文网首页
FMDB源码分析

FMDB源码分析

作者: iOS白水 | 来源:发表于2019-06-01 06:59 被阅读0次

    1.关键点
    再多线程 存储数据的,要通过FMDB Queue 串行队列
    dispatch_queue_set_specific就是向指定队列里面设置一个标识。

    2.同步串行

    • (void)close {
      FMDBRetain(self);
      dispatch_sync(_queue, ^() {
      [self->_db close];
      FMDBRelease(_db);
      self->_db = 0x00;
      });
      FMDBRelease(self);
      }

    3.attribute
    attribute 可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute).

    该属性通知编译器函数从不返回值
    extern void exit(int) attribute((noreturn));

    4.__has_feature
    过给定的值,判断编译器是否支持该特性类似的特性
    __has_feature(objc_arc),表示支持自动引用计数机制(ARC)
    @noescape
    @noescape 用来标记一个闭包, 用法如下
    func hostFunc(@noescape closure: () -> ()) -> Void

    @noescape字面意思是无法逃脱. 在上例中, closure 被@noescape修饰, 则声明 closure 的生命周期不能超过 hostFunc, 并且, closure不能被hostFunc中的其他闭包捕获(也就是强持有).
    用例
    func hostFunc(@noescape closure: () -> ()) -> Void {
    //以下编译出错, closure 被修饰后, 不能被其他异步线程捕获
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    closure()
    }
    }

    相关文章

      网友评论

          本文标题:FMDB源码分析

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