AFNetworking 与 FMDB 使用过程中遇到的问题

原创 2016年08月29日 22:02:36

AFNetworking 与 FMDB 都是iOS 开发者的神器,它们本身使用方便,更加值得学习研究。

近日有小伙伴遇到个问题,大概是这样的:用 AFNetworking 发送异步请求,将返回的数据存入数据库里。数据库是用 FMDB 创建的。可是问题来了,请求回的数据量比较大,存入数据库中耗时较长,这样就造成了卡顿。

原因是什么呢?查了相关资料发现,AFNetworking 请求数据成功后,返回的数据是在主线程处理的。我们一般在主线程更新 UI ,所以 AFNetworking 默认是把数据返回后在主线程使用。可是我们将数据存入数据库不需要占用主线程,那怎么办呢?

其实不用想也知道,AFNetworking 这么强大的三方库,肯定有相关的接口提供给我们。

[oper setCompletionQueue:dispatch_get_global_queue(0,0)];

其中 opera 是 AFHTTPRequestOperation 



这样就可以设置请求返回数据在其他线程处理了。可是如果你的数据库是这样创建的:FMDatabase *db = [FMDatabase shareDatabase]; 那么你可能会遇到错误,原因是数据库考虑到线程安全,你在主线程创建的数据库不能在此时用另一个线程访问。FMDB 这么强大,肯定也有解决方案啊,不错,

FMDataBaseQueue *queue = [FMDataBaseQueue databaseQueueWithPath:path];


这样创建数据库才是正确的。具体的使用方法也很简单,git 上有示例。不要以为这样就可以了,其实还会报错的,你的数据库会被加锁,原因还是线程问题。我们应该创建一个单利,保证只有一个 queue。这样才是安全的。

参考资料:FMDB 说明 FMDB 线程问题 AFNetworking网络请求的线程问题 http://blog.csdn.net/kyfxbl/article/details/38123239 非常感谢这几位作者!

版权声明:本文为博主原创文章,未经博主允许不得转载。

AFNetworking2.x 使用过程中遇到的问题

1.//下面写一下关于AFNetworking2.0的GET数据请求问题,刚开始的时候没有写下面标红的代码,所以导致有一个问题,错误显示如下: Error: Error Domain=AFNetwo...
  • mdk132
  • mdk132
  • 2014年05月23日 10:11
  • 2006

caffe使用过程中遇到的问题和解决办法

caffe使用过程中遇到的问题和解决办法

QTP安装过程中遇到的问题

  • 2014年06月23日 16:43
  • 154KB
  • 下载

Android WebView 使用过程中遇到的问题与总结

注意: WebView使用必须在AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available...

xampp安装过程中遇到的问题整理

  • 2015年07月10日 00:35
  • 199KB
  • 下载

EventBus使用过程中,遇到的问题点

说到EventBus,想必大家都不陌生,咦~~~~你没听过,好吧,你还要认真学习啊,这篇博客不是去分析EventBus的源码的,也不是讲什么人生哲理,就是教大家如何使用这么一个神器,以后谁要是问你Ev...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AFNetworking 与 FMDB 使用过程中遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)