tinypng
压缩PNG图片。视频能够经过 Final cut等软件进行分辨率压缩。音频则下降码率便可。LaunchScreen.storyboard
,启动图在一个项目资源中占比其实蛮大的,可是使用 LaunchScreen.storyboard
只须要设置一张ImageView便可。IconFont的
使用很方便,项目中图标太多或者随时须要转换图标颜色的话,建议使用Realm
Realm
,听说是目前是性能最好的移动端数据库。可是在三方库中能够看到,Realm
的支持占了很大的比重,大约在 8M 左右。可是若是使用 FMDB
话只须要192KB,而 CoreData
几乎能够忽略不计。数据库
重复代码的审核、无用的开源库删除缓存
Assets.xcassets
中;并使用imageWithContentsOfFile
加载不让系统缓存Assets.xcassets
中让系统缓存,使用imageNamed
加载非逃逸闭包是有利于内存优化的,因此尽可能使用非逃逸闭包性能优化
NSSet
(用hash实现)和NSArray
功能性质同样,用于存储对象,属于集合。可是和NSArray
不同的是它属于 “无序集合”,在内存中存储方式是不连续的,而NSArray
是“有序集合”它内存中存储位置是连续的。 因此在集合中寻找一个元素的时候使用NSSet
,而若是须要循环集合中的全部对象来找到所须要的目标则使用NSArray
服务器
对象的建立和销毁,对象属性的调整、布局计算、文本的计算和排版、图片格式转码和解码、图像的绘制(Core Graphics
)闭包
纹理的渲染(OpenGL
)并发
CPU
计算控件的位置、大小CPU
会将这些数据提交给GPU
来进行渲染FrameBuffer
视频控制器
从FrameBuffer
读取的数据显示在显示器
上因为垂直同步的机制,若是在一个 VSync 时间内,CPU 或者 GPU 没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏会保留以前的内容不变。这就是界面卡顿的缘由。异步
从上面的图中能够看到,CPU 和 GPU 不论哪一个阻碍了显示流程,都会形成掉帧现象。因此开发时,也须要分别对 CPU 和 GPU 压力进行评估和优化。布局
CAlayer
取代UIView
UIVIew
的相关属性,好比frame
、bounds
、transform
等属性,尽可能减小没必要要的修改Autolayout
会比直接设置frame
消耗更多的CPU资源UIImageView
的size
保持一致GPU
能处理的最大纹理尺寸是4096x4096,一旦超过这个尺寸,就会占用CPU
资源进行处理,因此纹理尽可能不要超过这个尺寸指的是在GPU在当前屏幕缓冲区之外开辟一个缓冲区进行渲染操做性能
致使产生离屏渲染的缘由:优化
可经过 Instruments 的 Core Animation 检测离屏渲染。
cell
的高度,缓存在相应的数据源模型中,减小CPU
的计算时间Storyboard
、Xib
等使用度