• Object-C知识点 (四) 性能优化


    #pragma mark - 性能优化


    1. 行高一定要缓存 缓存行高是解决性能优化的最佳途径(除非刷新频率已经很高了,否则一定要缓存)
    2. 尽量减少计算,所有需要素材提前计算好
    3. 控件不要设置圆角半径,图片的拉伸要用代码去处理,减少CPU和GPU的消耗
    4. 不要动态创建控件,需要展示的控件,都要提前创建好,在展示的时候根据数据隐藏或显示
    5. cell中的层次越少越好,数量越少越好(实现更好理解的前提下尽可能少)
    6. 高级优化 离屏渲染 self.layer.drawsAsynchronously = true
    栅格化 self.layer.shouldRasterize = true
    self.layer.rasterizationScale = UIScreen.main.scale
    异步绘制之后会生成一张独立的图像
    cell在屏幕上滚动的时候,本质上滚动的是这张图片
    如果cell的性能已经很好就不需要离屏渲染,离屏渲染回在CPU/GPU之间快速的切换,耗电厉害

    #pragma mark - imageName和imageWithContentOfFile区别


    imageName:加载图片
    1.当对象销毁,图片对象不会随着一起销毁
    2.加载的图片占据的内存较大:9.48
    3.相同的图片只会加载一份到内存中,如果同时使用,使用同一个对象即可

    imageWithContentOfFile:加载图片
    1.当对象销毁的时候,图形对象会随着一起销毁
    2.加载的图片,占据的内存较小:6.25
    3.相同的图片会多次加载到内存中,如果同时使用图片,使用的是不同的对象

    总结:
    imageName:如果一些图片在多个界面都会使用,并且图片较小,使用频率高.(图标/小的背景图)
    imageWithContentOfFile:只在一个地方使用,并且图片较大,使用频率不高.(版本新特性/相册)

    #pragma mark - 图片的性能优化/模拟器的技巧

    png图片是支持透明的 设置颜色的时候一般不建议设置透明色,会消耗GPU
    Color Blended Layers 图像的混合区域进行由绿到红的高亮
    Color MisAligned Images 会高亮那些拉伸和缩放的图片,没有正确对齐到边缘的图片(图片的周边透明)
    Color Copied Images 复制的图像(一般不会出现,项目中一般不会使用)
    Color Offscreen-Rendered Yellow 离屏渲染 shadowPath或者shouldRasterize来优化

    #pragma mark - 向工程中添加文件的三种方式

    一:黄色的文件夹,打包的时候不会建立目录,!!!主要保存程序文件!!!
        黄色文件夹中的素材-- 不允许重名


    二:蓝色的文件夹,打包的时候会建立目录,可以分目录的存储素材文件
    素材可以重名
    游戏的场景 background.png[草地/雪山/高山]
    手机应用的皮肤:白天夜间模式
    不要把程序文件放在蓝色的文件夹中

    三: xxx.bundle文件  三方文件(程序文件+xxx.bundle)

    可以按照黄色文件夹的方式拖拽,既会保留住bundle中的资源目录结构,程序文件也能使用
    通常用在第三方框架的素材
    可以避免文件重名 logo.png

    #pragma mark - Widget开发

    1.添加Widget 系统会自动创建Widget文件夹 里面有需要的文件
    2.在原来的Info.plist文件中添加URL Types: 填写:BuildID 和URL Schemes
    3.展示需要的按钮,关联方法 URL Schemes中的内容://字符串
    4.点击按钮走到appDelegate的 application: openURL: options: 根据url.host(lieryang://host)来判断为哪一个



    #pragma mark -- 软件开发动态修改界面

    苹果现在关闭了js的动态更新的大门,但是还有很多的方法可以实现不需要用户更新软件,实时更新用户界面

    appDelegate中访问服务器加载需要展示的json文件(json一定要小)存放到手机的沙盒文件 不需要监听失败

    在主控制器
    先从沙盒中加载json文件 加载到文件直接展示 没有加载到文件展示系统默认的界面

    这样就可以实现服务器更新json数据,客户端就可以实时更新展示

     更多内容--> 博客导航 每周一篇哟!!!


    有任何关于iOS开发的问题!欢迎下方留言!!!或者邮件lieryangios@126.com 虽然我不一定能够解答出来,但是我会请教iOS开发高手!!!解答您的问题!!!

  • 相关阅读:
    三地气温的典型相关分析
    android 使用 BroadcastReceiver 总结
    发布网站问题笔记
    Android 两个Activity 实现数据的来回传递
    input 标签屏蔽谷歌浏览器高亮显示
    javascript 获取当前html 标签的位置
    c# 四舍五入
    利用SQL的charindex实现字符串数组和Split函数
    ExtJs 一些常用的控件
    C#中return、break、continue的用法
  • 原文地址:https://www.cnblogs.com/CoderEYLee/p/Object-C-0017.html
Copyright © 2020-2023  润新知