1.首先要知道一点,你的消息储存是用数据库储存的!

看了一下微信和qq的消息处理,一般情况下第三方(亲加,容云,环信都会有本地的数据库)处理过的!

但是我发现,最近一个需求要求开发@”消息已读“@”消息送达“的处理,和UI显示。

我想了各种办法,GCD线程异步,带来的会有另外的一个问题,多线程访问同一个资源,be locked。或者说你在接收到消息的时候开一个线程,接到消息的时候开一个线程。一般情况下是没有问题的。但是重新一个账号登陆的时候就会有以前你读过和没有读过的消息!(如果你们购买了,app和网页消息同步的时候)!

解决办法:

后台开一个永驻线程(有崩溃主线程中也不受到影响),而且也不会多个线程访问同一个路径下的数据库

@property (nonatomic, strong) NSThread *thread;

/***开启一个永驻线程**/

- (void)threadRunloopPoint:(id)__unused object{

NSLog(@"%@",NSStringFromSelector(_cmd));

@autoreleasepool {

[[NSThread currentThread] setName:@"changzhuThread"];

NSRunLoop *runLoop = [NSRunLoop currentRunLoop];

//// 这里主要是监听某个 port,目的是让这个 Thread 不会回收

[runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];

[runLoop run];

}

}

- (NSThread *)thread{

if(!_thread){

_thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadRunloopPoint:) object:nil];

[_thread start];

}

return _thread;

}

//接收到已读消息回执的代理

- (void)NotificationCenterReadMessage:(NSNotification *)notification{

ReadMessageTime * readMark = [[ReadMessageTime alloc]init];//已读回执消息对象(自己建立)

readMark.cType = [notification.userInfo objectForKey:@"cType"];

readMark.messageTime = [notification.userInfo objectForKey:@"messageTime"];

readMark.tId = [notification.userInfo objectForKey:@"tId"];

[self performSelector:@selector(insertReadMessageTime:) onThread:self.thread withObject:readMark waitUntilDone:NO modes:@[NSDefaultRunLoopMode]];

}

- (void)insertReadMessageTime:(id)readMark{

[[[MyFMDB alloc]init] insertReadMessageTime:readMark];

}

iOS开发 落地消息多的处理办法(仅供参考)的更多相关文章

  1. jdk1.8+SpringAOP注解报java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut select错误的不知原因的解决办法[仅供参考]

    先说办法:如果Aspectweaver-1.*.*jar这三个包版本比较低, 比如1.5.0这一层次的,可以找版本高一点的包替换低版本的包,问题可以得到解决 jar包的下载地址:https://mvn ...

  2. iOS开发——远程消息推送的实现

    在我们使用App的过程中.总是会收到非常多的消息推送.今天我们就要来实现这个功能.首先消息推送分为本地消息推送和远程消息推送.而当中又以远程消息最为经常使用. 可是在推送远程消息之前.有两个前提条件. ...

  3. iOS开发之三个Button实现图片无限轮播(参考手机淘宝,Swift版)

    这两天使用Reveal工具查看"手机淘宝"App的UI层次时,发现其图片轮播使用了三个UIButton的复用来实现的图片循环无缝滚动.于是乎就有了今天这篇博客,看到“手机淘宝”这个 ...

  4. 微信JSSDK javascript 开发 代码片段,仅供参考

    最全面最专业的微信公众平台开发教程:http://www.cnblogs.com/txw1958/p/weixin-js-sdk-demo.html 比较完整的分享教程:http://www.cnbl ...

  5. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  6. python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)

    类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...

  7. Python09作业思路及源码:高级FTP服务器开发(仅供参考)

    高级FTP服务器开发 一,作业要求 高级FTP服务器开发 用户加密认证(完成) 多用户同时登陆(完成) 每个用户有不同家目录且只能访问自己的家目录(完成) 对用户进行磁盘配额,不同用户配额可不同(完成 ...

  8. Himi浅谈游戏开发de自学历程!(仅供参考)

    李华明Himi原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/himistudy/382.html ☞ 点击订阅 ☜ 本博客 ...

  9. 从零开始学Python08作业源码:开发简单的FTP(仅供参考)

    服务器端:server_server.py #!usr/bin/env python # -*- coding:utf-8 -*- # auther:Mr.chen # 描述: import sock ...

随机推荐

  1. CSS3制作下拉菜单

    导航菜单其实是没有什么可说的,制作方法到处可见,今天这个案例本来不只是一个导 航,还有一个搜索表单的,可是为了偷懒,把搜索表单部分去掉了,就变成了一个CSS3 制作的下拉菜单.在这个导航中主要两点,一 ...

  2. ZOJ 3705 Applications

    点我看题目 题意 : 真是一道又臭又长的模拟题啊,不过比赛的时候没看,赛完了补的. 给你N个候选人,让你从中选M个候选人,根据四个大规则来确定每个人的分数,然后选分数前M个人的输出. 1.在MOJ上做 ...

  3. 怎么查看和修改 MySQL 的最大连接数?

    一. 查看Mysql当前配置 MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看 mysql> show variables like '%connections ...

  4. [状压dp]POJ1185 炮兵阵地

    中文题 题意不再赘述 对于中间这个“P” 根据dp的无后效性 我们只需考虑前面的 就变成了 只需考虑: 也就是状压前两行 具体与HDOJ的4539类似: 看HDOJ 4539 仅仅是共存状态的判断不同 ...

  5. Cocos2d-x 3.2编译Android程序错误的解决方案

    最近的升级Cocos2d-x 3.2正式版.iOS不管是什么程序编译问题,使用结果cocos compile -p android编译APK计划.结果悲剧,出现以下错误. Android NDK: I ...

  6. ASP.NET控件Button (e.CommandArgument的使用方法)

    e.CommandArgument的使用方法 1. 在 Web 窗体页上显示普通按钮 (Button) 控件. <asp:Button id="MyButton" Text= ...

  7. VCL+FMX 双剑合壁编程

    VCL 是经典,FMX 是新生,新生事物总会带来一些好玩新奇的东西.舍弃经典是浪费,不了解新生事物是等死,那么我们来一个二合一双剑合壁又如何呢? 要双剑合壁,就得投些机,取些巧.由于 Delphi / ...

  8. YIi 权限管理和基于角色的访问控制

    验证和授权(Authentication and Authorization) 定义身份类 (Defining Identity Class) 登录和注销(Login and Logout) 访问控制 ...

  9. Item Import: What Does "Sync" Items Do? (Doc ID 417887.1)

    In this Document Goal Solution APPLIES TO: Oracle Item Master - Version 11.5.10.0 to 11.5.10.0 [Rele ...

  10. bzoj3796

    好像已经很久没有做后缀数组的题目,导致这种题一开始没想出来看到公共子串肯定想到后缀数组吧,但我都忘了最长公共子串怎么求了重要的性质:最长公共子串=max(h[i])名次相邻的两个后缀要分别属于s1,s ...