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
  • 1967

EUI中控件使用过程中遇到的问题

1:ProgressBar格式化的问题 之前如果你使用的是默认的ProgressBar的话,显示出来的效果应该是这样 不过有时候,我们游戏需要的是这种格式 这是一种百分比...

QTP安装过程中遇到的问题

  • 2014-06-23 16:43
  • 154KB
  • 下载

Android studio使用过程中遇到的问题

一、快捷键问题 用习惯了eclipse,开始用Android studio还真是不爽,那就在File->Settings-> Keymap 在弹出的选项卡中选择Eclipse,确定,好了快捷键还是原来...

jquery mobile使用过程中遇到的一些问题及解决方法

最近在项目在综合考虑了可能维护性和应用本身的复杂性,采用了HTML5 + JQuery Mobile的文案。 记录一下遇到的两个问题。 1)为了在手机上运行的更快,canvas中底图决定调用 putI...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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