美文网首页GCD专题
GCD数据持久化(二)

GCD数据持久化(二)

作者: TurboCoder | 来源:发表于2016-01-15 14:49 被阅读152次

    如果各位看官看过我上一篇利用GCD持久化方式(一)那我在这里对一些相同的参数就不在做过多的介绍了,还请各位见谅.

    还是按照惯例,先搞一个路径用来存储数据

    NSString *path = [NSString stringWithFormat:@"%@/Documents/myData.text",NSHomeDirectory()];

    NSLog(@"%@",path);

    这里我们创建一条普通的异步线程就可以

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    然后创建dispatch_data_t

    intintbuffer[] = {1,2,3,4};

    dispatch_data_t data= dispatch_data_create(intbuffer,sizeof(intbuffer), queue, NULL);

    接下来我们需要搞一个信号量来监测是否完成任务

    dispatch_semaphore_t sem = dispatch_semaphore_create(0);

    好啦,开始写入文件

    dispatch_semaphore_t sem = dispatch_semaphore_create(0);

    dispatch_fd_t fd= open(strcpy(myChar, (char*)[path UTF8String]), O_RDWR | O_CREAT | O_TRUNC, S_IRWXU | S_IRWXG |S_IRWXO);

    dispatch_write(fd, data, queue,^(dispatch_data_t data,interror) {

    NSLog(@"已经写入 %zu 字节!", dispatch_data_get_size(data) - (data ? dispatch_data_get_size(data) :0));

    dispatch_semaphore_signal(sem);

    });

    然后等待完成后关闭文件描述

    dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

    close(fd);

    以上是写入文件的操作,回调函数里面的error需要注意下,如果一切正常,写入成功的话error == 0 其他情况都是写入失败

    读取操作和写入操作一样,我就直接上代码了

    fd = open(strcpy(myChar, (char*)[path UTF8String]), O_RDWR);

    dispatch_read(fd,4*sizeof(int), queue, ^(dispatch_data_t data,interror) {

    dispatch_semaphore_signal(sem);

    });

    dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

    close(fd);

    getchar();

    好啦!我目前就研究了这两种的GCD数据持久化方式,由于能力有限,目前还没有深入剖析这两种方式的具体区别,还请大神们 不吝赐教

    相关文章

      网友评论

        本文标题:GCD数据持久化(二)

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