当前位置: 首页 > news >正文

提高自己应用性能的总结架构篇

OK ,为什么会写这篇文章呢?因为最近接触老一些面试者,总感觉他们认为做应用只是纯粹的搭个界面,殊不知不仅仅如此。
 
我们从哪几个方面来测试应用的性能呢?
316FDE83 DC35 4EDC 9BB6 412AC17F2782
这里,因为没用真机来调试所以不会出现fps选项。下面再来一个
65AB2B29 8E6C 489B BA1A AB7964CEB10A
这里可以测试fps ,提示必须真机来运行,fps为0因为你没用动。
fps接近于60帧,那么你的app是相当的流畅,当然代价是要付出很多很多,然而说这些没有什么卵用,上面看的是翻天覆地的变化,没翻天覆地变化以为你就换换皮肤呢。
 
在没有很多业务开发者,和架构组的IOS app怎么提高性能呢?
 
第一:架构方面
谁说我们app 没有架构了。我们可以参考MVC ,MVVM ,MVP 等一些东西来提炼出我们自己东西。
我们网络请求的数据可以根据每个API来创建一个类,这个类用来接受params ,返回json  
1:比如model 数据层我们可以接收网络请求过来的JOSN 或者XML转化成数据模型来使用,因此这里面除了你的模型属性字段,还应该有一个接收json转化model 的方法。还可以实现你的copy协议方法,以及归档方法方面数据持久化。
2:view 负责视图元素展示。你可以在这里面,
重写布局
D3D8D931 064E 4EF3 B4BD E8479334AB06
 
或者cell高度以及给cell上元素通过传过来的model 赋值。
56BC0348 A24A 4E5F 820B 8D46D6384915
注意红线部分会触发楼上重写布局方法。
3:你甚至可以有一个数据持久化的类,来做model 的缓存,比如头文件可以有一些save model to cache,update  model to cache ,load model from cache, delete model from cache
E6C6BA18 DC7F 4F9B 9D7E 7F8F081E58C2
 
4:控制器里做些什么呢
#import Controllers

#import Models

#import Views

#import Cells
上面导入的头文件必须分组织隔开
 
 
 
 
#pragma mark - Constants Define
 
一些cell 的标识符,常量定义

#pragma mark - Properties Getter And Setter

get set 方法实现 主要是get 方法可以在这里面做懒加载,需要时候再创建,在内存等方面得到优化,我很多几乎所有的创建东西都是懒加载,还在抱怨内存和跳转速度吗,不妨一试
 
#pragma mark - Controller Life Cycle
控制器生命周期

- (
void )viewDidLoad {
    [
super viewDidLoad];
   
// Do any additional setup after loading the view.
}

- (
void )didReceiveMemoryWarning {
    [
super didReceiveMemoryWarning];
   
// Dispose of any resources that can be recreated.
}

#pragma mark - Setup
设置界面UI 等

#pragma mark - Actions
view上触发的事件让控制器通知model等

下面就是很多协议方法

#pragma mark - UITableViewDelegate And UITableViewDataSource


#pragma mark - UICollectionViewDelegate And UICollectionViewDataSource

5:我们需要一个类来做一些业务逻辑的东西
比如

- (NSArray*)getAlbums;

- (void)addAlbum:(Album*)album atIndex:(int)index;

- (void)deleteAlbumAtIndex:(int)index;

这里面会导入网络请求逻辑,数据存储逻辑,转化model逻辑。我们在控制器调用这个类的头文件API方法可以良好隔离model ,网络请求,model ,cache等逻辑。就是下图
E5EDDCC2 8B67 46DD BBAF 5934AE7003DA
 
也就是下图的结构,view上触发一个业务逻辑比如fetch 数据显示到views。controller 调用API逻辑的fetch数据接口。然后API里面逻辑有获取json 转化model。model的管理cache方面。最后获取到数据把model给view 的setModel 方法,给View展示数据。
  E5EDDCC2 8B67 46DD BBAF 5934AE7003DA
 
 
下篇从网络,缓存方面来介绍,然后数据库,多线程,UI流畅度方面介绍,代码规范,页面布局等介绍。
 
 
 
 

 

相关文章:

  • 什么是端口映射
  • java中使用poi实现导入Excel
  • asp.net预定义的HttpModule
  • 20160309高项作业
  • nginx服务器绑定域名和设置根目录的方法
  • 不懂编程的运维人员到底还能走多远?
  • 经典SQL语句大全(数据开发篇)
  • 【Linux】一张图让你读懂Linux内核运行原理
  • nginx负载均衡实现tomcat集群
  • LeetCode-187. Repeated DNA Sequences
  • 有趣的玩意儿
  • 【直播回顾】21天搭建推荐系统:帮你减少90%代码量
  • 最少换乘 之简化版
  • Nginx(四):LNMMP架构实现Web动静分离
  • JNI 调用,C++ invoke C# dll return to java(见git代码)
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • leetcode388. Longest Absolute File Path
  • Markdown 语法简单说明
  • React-生命周期杂记
  • Spring-boot 启动时碰到的错误
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue中实现单选
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 前端临床手札——文件上传
  • 驱动程序原理
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 项目管理碎碎念系列之一:干系人管理
  • 项目实战-Api的解决方案
  • 再谈express与koa的对比
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 回归生活:清理微信公众号
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • #FPGA(基础知识)
  • #Lua:Lua调用C++生成的DLL库
  • (6)设计一个TimeMap
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (九)c52学习之旅-定时器
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .Net MVC + EF搭建学生管理系统
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .so文件(linux系统)
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @ConfigurationProperties注解对数据的自动封装
  • [<死锁专题>]
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [bzoj 3124][sdoi 2013 省选] 直径