zoukankan      html  css  js  c++  java
  • 提高自己应用性能的总结架构篇

    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流畅度方面介绍,代码规范,页面布局等介绍。
     
     
     
     

     
  • 相关阅读:
    二、Mecanim 动画系统(第二部分)
    二、Mecanim 动画系统(第一部分)
    二、对象和类型(第三部分)
    二、对象和类型(第二部分)
    二、对象和类型(第一部分)
    一、核心C#(第二部分)
    一、Unity编辑器
    一、核心C#(第一部分)
    反射(Reflection)一、
    RSA算法(二)
  • 原文地址:https://www.cnblogs.com/qiqibo/p/5249016.html
Copyright © 2011-2022 走看看