• Stars
    star
    103
  • Rank 333,046 (Top 7 %)
  • Language
    Objective-C
  • Created over 5 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

一个完整的聊天UI框架(样式仿微信聊天)。数据库结构清晰,消息类型分离,可扩展性强;图片消息支持缩略图,所有消息缓存行高,性能消耗低;同时,实现了自定义表情键盘,可按格式进行扩展。

关于数据库使用中出现的闪退问题,闪退日志如下:

BUG IN CLIENT OF libsqlite3.dylib: illegal multi-threaded access to database connection

解决方案:将数据库的调用放在同一线程中处理,如:全部在主线程中处理;若想要放在分线程中,则需要创建固定的分线程,统一在该线程中调用数据库即可.

举例:通过GCD创建分线程的注意事项:

错误示例:
通过如下代码创建的分线程并非固定的,而是系统按一定规则分配的
dispatch_async(dispatch_get_global_queue(0, 0), ^{
	//此处执行数据库操作可能会引起闪退
});

正确示例:
首先创建自定义线程(只创建一次)
dispatch_queue_t sqliteQueue = dispatch_queue_create("sqliteQueue",NULL);
调用数据库时,进入该线程
dispatch_async(sqliteQueue, ^{
	//执行数据库操作
});
        

一、效果图

效果图

二、集成方式

直接导入:#import "WZMChat.h"

文件夹结构如下图:

文件夹结构

三、数据库设计简单描述

从类型上,可分为3个表:

用户表(user)、会话表(session)、消息表(message)

从实际需求上,再进一步细分:

用户表需要两个:用户(user)和群(group);

而为了消息的优化处理,每一个私聊或群聊,都可以新建一个消息表(message)

处理逻辑如下:
1、添加好友 - 发起聊天;
2、查询对应的消息表(message)是否存在,不存在则创建;
3、向该消息表(message)插入私聊消息;
4、从会话表(session)查询对应的会话,不存在则插入,存在则更新;
5、刷新相关页面。

四、表情键盘的处理

1、自定义layout,实现表情键盘的横向布局;

2、键盘弹出的时机与UITableView的偏移处理;

3、表情字符删除时的匹配处理,以及输入框光标的变化;

4、普通文本转换为表情富文本时的字符偏移,以及正则匹配效率的处理。

五、消息列表滑动优化

1、使用model类存储行高、行宽,避免重复计算;

2、视频、图片等消息使用缩略图,减少系统开销;

3、其他常规的优化处理。

More Repositories

1

LLGifView

轻量级gif加载,可加载本地和网络的gif图片
Objective-C
21
star
2

LLPhotoBrowser

精简版图片浏览器,使用UIScrollView进行图片的缩放、平移,可根据需求自定义界面或扩展功能
Objective-C
19
star
3

LLNavigationController

This is a subClass Of UINavigationController.本导航条继承UINavigationController,自定义滑动返回手势与滑动动画,同时可自定义过场动画,解决了手势共存时的冲突。在系统类的基础上进行扩展,节约性能,无任何代码耦合度,可随时集成与剥离。支持iOS7以上系统,兼容iOS11,版本稳定。
Objective-C
19
star
4

LLVideoPlayer

视频播放器,支持横竖屏切换,实现了滑动调节亮度和声音的功能,界面流畅精简,使用方便,可加载本地或网络视屏
Objective-C
17
star
5

LLChat

一个完整的聊天UI框架,数据库结构已完善,实现了发送文本、图片、视频、语音消息的功能,消息类型分离,具有高度的可扩展性,并且对行高进行缓存,解决了滑动时卡顿的问题。同时,表情键盘也做了完善的处理,比如:富文本的输入、显示与删除,表情图片的完整性与可替换性较高。
Objective-C
13
star
6

LLTimerTableView

实现tableViewCell倒计时
Objective-C
8
star
7

LLRefresh

轻量级下拉刷新,上拉加载
Objective-C
8
star
8

LLAudioPlayer

可播放本地或者网络音频文件,支持线控或者蓝牙切换歌曲,实现了单曲循环、随机播放、顺序播放等基本功能,可查看当前播放列表,自定义锁屏播放界面,添加了来电时的中断处理、音频文件获取失败时的错误处理
Objective-C
8
star
9

LLWebBrowser

It's a web browser that can load pages of local html.
Objective-C
6
star
10

LLVisualLog

可视化日志打印工具
Objective-C
6
star
11

WZMKit

Objective-C
3
star
12

LLBaiduMapTest

基于百度地图的搜索与定位功能
Objective-C
3
star
13

LLApplication

自定义工程模板
1
star
14

LLTimerTest

浅析关于timer引起的内存泄漏
Objective-C
1
star
15

LLRoundedImage

几种不同的切圆角对比
Objective-C
1
star