Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >直播APP的性能优化-礼物篇

直播APP的性能优化-礼物篇

作者头像
落影
发布于 2018-04-27 08:33:13
发布于 2018-04-27 08:33:13
2.1K00
代码可运行
举报
文章被收录于专栏:落影的专栏落影的专栏
运行总次数:0
代码可运行

介绍

记录、总结开发遇到一些问题,大家一起交流学习。 这次带来,对直播APP性能优化的总结,以QA的形式总结。

欢迎关注文集-直播Live

实现方式

1、Q:礼物动画如何实现?

A:礼物分小礼物动画和豪华礼物处理; 序列帧+GCD+layer动画+UIView的Block动画组合使用;

2、Q:定时器采用CADisplayLink还是NSTimer?

A:都可以。重点在于添加到的mode,个人采用的是添加到NSRunLoopCommonModes的CADisplayLink。

3、Q:CADisplayLink对应的屏幕刷新和Xcode的FPS是什么关系?

A:CADisplayLink对应的是屏幕刷新帧率,一般60FPS; xcode的FPS是真实显示的帧率,只要一帧处理的时间超过16ms,显示帧率就不会为60FPS;

4、Q:小礼物的连击效果如何实现?

A:逻辑上,礼物连击可以看成多个桶排成的队列,礼物赠送者id+礼物类型相同的放在一个桶内。连击过程中,可以不断往桶里放礼物。如果连击完成,桶里没有礼物,开始放下一个桶的礼物。 实现上,给礼物数字放大缩小动画设置delegate,在stop回调的时候进行上述的逻辑判断即可。

5、Q:小礼物的连击数字是[0-9]的文字图片组成的,每次显示都需要拼接图片,如何优化?

A:用富文本的格式,同时图片用imageNamed的形式加载;如果内存不紧张,可以把富文本根据num缓存,避免多次拼接;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    NSMutableAttributedString * mutableAttributedString = [[NSMutableAttributedString alloc] initWithString:sendGiftNumStr];
    UIImage *giftNumIcon = [UIImage imageNamed:imageName];
    NSTextAttachment *giftXAttachment = [[NSTextAttachment alloc] init];
    giftXAttachment.image = giftNumIcon;
    NSAttributedString *giftXAttributedString = [NSAttributedString attributedStringWithAttachment:giftXAttachment];
    [mutableAttributedString replaceCharactersInRange:NSMakeRange(0, 1) withAttributedString:giftXAttributedString];

图片加载

1、Q:加载图片iPhone4+iOS7,加载图片,提示:

Could not load the "gift_plane" image referenced from a nib in the bundle with identifier Unable to create unsliced image from csi bitmap data Unsupported pixel format in CSI

A:把Images.xcassets里面的jpg相关的图片换成png。 The issue is that iOS 7 apps cannot have JPEG images in the CAR file. actool should have copied the JPEG as a loose image into your app's folder. To work around this issue, you should either convert the image to a PNG or include the JPEG as a resource outside of the asset catalog.

2、Q:直接以引用方式导入的图片,pathForRes查找图片的路径?

A:方式1 [UIImage imageNamed:imagePath]imagePath为图片的相对路径; 方式2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
imagePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:imageName];
[UIImage imageWithContentsOfFile:imagePath];

imagePath为图片的相对路径,而且必须附带.png的后缀;

3、Q:imageWithContentsOfFile加载的图片没有缓存,重复使用的时候会加载多次,是否可以用NSMutableArray存储起来?

A:不行。可以使用NSCache,步骤如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、加载cache中的图片; 如果有则返回,没有到步骤22、加载本地的缓存文件,如果有则返回,没有到步骤33、从网络下载图片,到步骤44、存入本地的缓存文件,到步骤55、放入cache,返回图片;

如果不需要网络下载图片,可以去除3、4步骤,同时可以同步返回;

如果使用array存储图片,会一直持有引用;NSCache会在内存不足时主动释放,故而加载的时候需先判断是否有缓存文件;

4、Q:使用序列帧的时候,需要加载很多次图片?

A:可以把多张图片放到一张图片,加载后通过-CGImageCreateWithImageInRect切割出多张图片;

内存优化

1、Q:直播的时候送出一个豪华礼物,为何内存会增加20M?

A:一个豪华礼物占用的内存包括图片内存+Animation(动画)内存;

2、Q:美术给出的资源总共加起来才几百k的大小,为何加载到内存会增加这么多?

A:先查看加载方式,+imageNamed:的方式会添加缓存,但使用完不释放;+imageWithContentsOfFile:的方式不会添加缓存,重复使用会占用多次内存,但使用完会回收; 其次,通过instruments工具查看,imageio_png_data占用内存过多;查看ipa包的图片资源,发现有三张图片分别为(3910528 + 1761437 + 9104388),大小占用450k;简单计算下,(3910528 + 1761437 + 9104388) * 4 = 25M,确定为三张图片过大;

3、Q:如何计算出来的图片大小?

A:图片的颜色空间为RGBA,那么加载到内存的大小=widthheight4bytes;

性能检测工具

1、Q:instruments录制按钮显示unable to find a service to record with

A:检查xcode版本能支持的最大手机版本,没问题的话重启手机和xcode,重新连接。

2、Q:instruments的Anonymous VM(匿名虚拟内存)是什么?

A:匿名虚拟内存是系统为程序预留的、可能会立即被重复使用的一部分可用内存。

3、Q:instruments检查发现除了礼物送频繁后,聊天的UITableView消耗的时间也很长,如何优化?

A:从cell高度计算、图片加载、布局layout开始优化; a.cell高度不会变,可以缓存; b.图片加载可以用imageNamed或者cache实现; c.尽量避免使用autolayout; d.控制每帧刷新数量; e.删除过多的历史消息;

总结

优化通过压力测试+instruments工具检测出瓶颈,同时检测代码逻辑实现。这些QA都是优化过程中的一些问题和解决方案,如果有建议和疑问欢迎交流。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.07.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
IOS 图片解码性能优化
测试方法比较简单,在一个可以tableView里面展示图片,图片是已经放在本地的10张图片,每张图片大于1MB
花落花相惜
2021/12/15
7820
iOS最全性能优化之25个建议
性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会在App Store写满差评。然而由于iOS设备的限制,有时搞好性能是一件难事。开发过程中你会有很多需要注意的事项,也很容易在做出选择时忘记考虑性能影响。本文针对不同阶段开发者提出了25个性能优化建议
IT苦逼一枚
2020/02/17
1.7K0
iOS最全性能优化之25个建议
iOS 客户端动图优化实践
GIF 和 Animated WebP 是互联网上最主流的动图格式, 但是在 iOS 开发中, 原生的 UIImage 并不直接支持 GIF 以及 Animated WebP 的展示, 因此有了各种优秀的第三方开源方案, 例如 SDWebImage 以及 YYImage 等. 这篇文章将以 QQ 音乐 iOS 端优化动图的实践为基础, 来介绍不同方案的思路以及优劣, 并给出优化的方案. 1. 端内动图展示的问题以及优化结果 长期以来, 部分机型浏览 Q 音的图文流时很容易闪退, 端内其他业务也存在不少动图相
QQ音乐技术团队
2023/05/12
6.2K4
iOS 客户端动图优化实践
程序员面试闪充 -- 性能优化
CPU 和GPU 关于绘图和动画有两种处理方式CPU(中央处理器)和GPU(图形处理器),CPU的工作都在软件层面,而GPU的在硬件层面。 总的来说,可以使用CPU做任何事情,但是对于图像的处理,通常GPU会更快,因为GPU使用图像对高度并行的浮点运算做了优化,所以,我们想尽可能的把屏幕渲染的工作交给硬件去处理,而问题在于GPU并没有无限制处理的性能,一旦资源用尽,即使CPU并没有完全占用,GPU性能还是会下降。 所以,目前大多的性能优化都是关于智能利用GPU和CPU,平衡它们之间工作负载。 Xcode
谦谦君子修罗刀
2018/05/02
9720
程序员面试闪充 -- 性能优化
<转>iOS性能优化:Instruments使用实战
最近采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧,小结如下。
tandaxia
2018/09/27
1.4K0
<转>iOS性能优化:Instruments使用实战
iOS 性能优化常用技巧总结import
用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和release的过程,所以你就不必去手动干预了。忘掉代码段结尾的release简直像记得吃饭一样简单。而ARC会自动在底层为你做这些工作。除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存。 在正确的地方使用 reuseIdentifier 一个开发中常见的错误就是没
rectinajh
2018/05/17
1.1K0
IOS 列表性能优化-图片解码性能优化
测试方法比较简单,在一个可以tableView里面展示图片,图片是已经放在本地的10张图片,每张图片大于1MB
花落花相惜
2021/11/21
2K0
iOS小技能(开发规范): weak和strong修饰符的规范使用
当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。
公众号iOS逆向
2022/08/22
9830
iOS小技能(开发规范): weak和strong修饰符的规范使用
优化 iOS 程序性能的 25 个方法
ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和release的过程,所以你就不必去手动干预了。忘掉代码段结尾的release简直像记得吃饭一样简单。而ARC会自动在底层为你做这些工作。除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存。
哲洛不闹
2018/09/14
8080
优化 iOS 程序性能的 25 个方法
iOS_UITableView性能优化
// 滑动时按需加载, 防止卡顿 配合SDWebImage https://github.com/johnil/VVeboTableViewDemo
mikimo
2022/07/20
7170
Android App性能优化全方面解析
为了让各位读者过好本次国庆节和中秋节,假日期间我将会推送一些非技术类文章,让你的假日不在孤单迷茫!
开发者技术前线
2020/11/23
7170
Android App性能优化全方面解析
原生APP的性能优化
原生APP的性能优化是确保应用流畅运行、提升用户体验的关键环节。以下是一些基于最新搜索结果的性能优化方法和策略。
数字孪生开发者
2025/03/22
1630
原生APP的性能优化
Swift 小仿微博列表
前言     鉴于目前Swift的ABI(应用程序二进制接口)、API(应用程序编程接口) 基本稳定,对于Swift的学习有必要提上日程了,这个Swift仿微博列表的效果是我最近一边学习《Swift
且行且珍惜_iOS
2019/07/28
1.5K0
原生APP的性能测试和优化
原生APP的性能测试和优化是确保用户拥有流畅、快速且响应灵敏体验的关键环节。一个性能不佳的应用可能会导致用户流失、差评以及对品牌的负面影响。以下是原生APP性能测试和优化的详细步骤和注意事项。
数字孪生开发者
2025/04/07
1420
原生APP的性能测试和优化
直播APP常用动画效果
介绍 记录、总结开发遇到一些问题,大家一起交流学习。 这次带来,对直播APP的常用动画总结。 直播Live 效果展示 下面是一个很多平台都有的入门豪华礼物动画——烟花。 一个复杂的礼物动画,首先
落影
2018/04/27
1.8K0
直播APP常用动画效果
求职笔记-iOS篇
前言 今年年初求职时,整理、回顾了学习iOS开发以来收获的知识,此篇为当时的笔记。 插一段我对面试的看法。 公司要在短短的几个小时内要详细了解求职者,并且求职者可能远远大于岗位需求,这个并不是一件简单的事情。 求职分为几大部分: 1、简历筛选,去掉大部分不符合要求的; 2、笔试,去掉没有准备的; 3、初面,去掉基础不扎实的; 4、复试,去掉综合能力欠缺的; 5、HR面,去掉三观不正确的; 在这个过程中,一个好的求职者会不断修改简历,已适应不同公司的要求;提前整理、回顾基础知识,以应对笔试和
落影
2018/04/27
1.2K0
求职笔记-iOS篇
YYImage 源码剖析:图片处理技巧
图片是现代化 APP 界面设计里应用广泛的东西,精美的图片可以带来视觉上的享受,提高用户体验。由此给技术上带来了一些挑战,比如动图的处理、图片显示流畅程度的优化、图片包大小的优化、超大图片的处理等。
波儿菜
2018/08/02
1.5K0
iOS 性能优化
为了解释这个问题首先需要了解一下屏幕图像的显示原理。首先从 CRT 显示器原理说起,如下图所示。CRT 的电子枪从上到下逐行扫描,扫描完成后显示器就呈现一帧画面。然后电子枪回到初始位置进行下一次扫描。为了同步显示器的显示过程和系统的视频控制器,显示器会用硬件时钟产生一系列的定时信号。当电子枪换行进行扫描时,显示器会发出一个水平同步信号(horizonal synchronization),简称 HSync;而当一帧画面绘制完成后,电子枪回复到原位,准备画下一帧前,显示器会发出一个垂直同步信号(vertical synchronization),简称 VSync。显示器通常以固定频率进行刷新,这个刷新率就是 VSync 信号产生的频率。虽然现在的显示器基本都是液晶显示屏了,但其原理基本一致。
赵哥窟
2020/06/29
2.9K1
iOS异常 'NSInvalidArgumentException'
在做帧动画demo时遇到以下异常 Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘* -[__NSArrayM insertObject:atIndex:]: object cannot be nil’ 异常代码 - (NSArray*)loadAllImagesWithimagePrefix:(NSString*)imagePrefix count:(int)count{
肓己
2021/08/12
1.2K0
UITableView性能优化-中级篇
老实说,UITableView性能优化 这个话题,最经常遇到的还是在面试中,常见的回答例如:
小蠢驴打代码
2018/12/27
1.7K0
相关推荐
IOS 图片解码性能优化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验