2019-8-27 iOS分享强制屏幕旋转、易崩溃点及高并发聊天

2019-08-28  本文已影响0人  吃大米的小蚂蚁

一、强制屏幕旋转
在很多情况下,我们并不希望在手机屏幕未锁定的情况下当手机旋转的时候页面也跟着一起旋转,最简单的方法是将Controller里的代理设置为NO

/** 全屏 */

/**

三、高并发聊天性能优化
1.数据加载的优化
因为正常情况下,APP里不会出现一秒钟要处理几千条列表数据的情况,而且在数据未加载出来的时候,页面是空白的用户操作也没有意义,所以一般情况下我们会在主线程去接收从异步数据处理线程处理好的数据,并在页面显示出来。但是在直播回放的时候,会遇到进度条一拖动,立刻接收到六七千条数据的情况,所以这里就要做单独优化处理,否则当聊天人数过多或者回放拖动的时候,页面会形成卡顿。处理的方法是将接收数据的操作也放在子线程里,保证主线程不受任何影响,当在子线程里将数据格式化好之后,再回到主线程将数据刷新在页面上。
2.动态计算页面高度的优化
列表页面还有一个性能占用过高的地方是列表高度的计算,因为Ios没有高度自适应的机制,所以要显示的列表数据都是要提前计算好要显示的内容高度然后返还给列表高度获取代理。在我们处理数据的时候,会在本地创建一个Dictionary来缓存每个列表内容的高度,key是数据的id,value是这个id的高度数据,把对高度的计算放在子线程处理列表数据的时候,而不是在列表滑动将要显示出来内容的时候。当列表滑动的时候,在高度代理方法里通过消息的ID匹配Dictionary里的key来获取计算好的高度并返回,如果有未缓存的高度,那么就计算并缓存下来,这样就保证了列表滑动的顺滑体验。
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
BJLMessage message = self.messages[indexPath.row];
NSNumber
heigt = [self.heightCatch valueForKey:[NSString stringWithFormat:@"msgID:%@",message.ID]];
if ([heigt floatValue] <= 0) {
BMWLivingChatCell cell = (BMWLivingChatCell)[self tableView:self.messageTV cellForRowAtIndexPath:indexPath];
heigt = @([cell getHeight]);
[self.heightCatch setValue:heigt forKey:[NSString stringWithFormat:@"msgID:%@",message.ID]];
}
return [heigt floatValue];
}

上一篇 下一篇

猜你喜欢

热点阅读