【实现效果】

【目录结构相关】

此示例展示用的是MVVM结构形式,表述如下

M:数据Model的存储,可以用来对属性进行处理。(即胖model概念,上图中xx万人订阅这个处理方法写在Model内)

V: View。用来统一管理控件初始化与布局。

VM:viewModel。负责网络请求及其他计算或事件处理

viewController文件夹下有一个控制器和一个MLDataView,这个view添加在控制器self.view上,然后这个控制器中其他view的初始化,添加和布局都在这个MLDataView里进行,这样把View分离整合到了一起。

MLDataViewModel里负责了网络请求,tableView代理和数据源方法的实现,及其他一些事件逻辑的封装。传统MVC一般这些代码都是放在控制器内,现在这样大量减少了控制器的代码。

MLDataModel里存储传输的数据,它也可以用来处理一些格式化的数据。如下图

这样model也可以分担一些属性的格式化处理。

【一些其他封装】

1.自定义MLHTTPSessionManager继承自AFHTTPSessionManager,可以在自定义的类里优雅地处理请求头,响应头或https设置相关的一些信息

2.网络请求扩展性强:自己公司的网络请求实现文件里逻辑要多得多,包括Token失效,刷新RefreshToken,网络请求错误码的拦截等。这些业务都可以根据自己的需要加入。

3.MLCustomHud弹出toast提示。实用性非常强。

4.Base文件夹下有两个类,其实企业及项目基本都会建立基类,也就是所以view都可以有一个基类,如tableView,UIlabel,UIButton,WKWebView,UITableViewCell等等,然后可以在基类中建立一些快捷方法设置属性等。

5.Category文件夹下Unicode里的代码为了实现nslog无法输出中文的问题。

6.Category下UIView+HudCount分类,用runTime对view进行引用计数。它的独有优势在于防止多个网络请求同时发生时对Loading框产生干扰,即可防止loading框重叠或提前消失。

PS:真正的mvvm应该是viewModel与View上的数据是双向绑定的,这里只是简单实现结构的分层,并没有实现双向绑定,双向绑定内容后期加上会再分享出来。

【demo地址】

码云:https://gitee.com/LiJinShi/MVVM_Demo

gitHub:https://github.com/LiJinShi/MVVM_Demo

ios MVVM实践 刷新网络请求+tableView展示数据的更多相关文章

  1. 微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据

    § 封装网络请求及 mock 数据 本文配套视频地址: https://v.qq.com/x/page/i05544fogcm.html 开始前请把 ch2-3 分支中的 code/ 目录导入微信开发 ...

  2. iOS项目中的网络请求和上下拉刷新封装

    代码地址如下:http://www.demodashi.com/demo/11621.html 一.运行效果图 现在的项目中不可避免的要使用到网络请求,而且几乎所有软件都有上下拉刷新功能,所以我在此对 ...

  3. iOS开发——post异步网络请求封装

    IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的. 在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装例子.我这里要给出的封装代码,是异 ...

  4. iOS 多个异步网络请求全部返回后再执行具体逻辑的方法

    对于dispatch多个异步操作后的同步方法,以前只看过dispatch_group_async,看看这个方法的说明: * @discussion * Submits a block to a dis ...

  5. iOS NSURLConnection和异步网络请求

    在日常应用中,我们往往使用AFNetworking等第三方库来实现网络请求部分.这篇文章会简要地介绍一下如何使用NSURLConnection来进行异步的网络请求. 我们先看一个小demo - (vo ...

  6. iOS 处理多个网络请求的并发的情况

    如何处理多个网络请求的并发的情况 一.概念 1.并发 当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配 ...

  7. iOS 自己封装的网络请求,json解析的类

    基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要. 楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求 ...

  8. 移动开发在路上-- IOS移动开发 五 网络请求封装

    接着上次的讲,这次我们讲 网络请求的封装  打开创建的项目,让我们一起来继续完成他, 上次我们说到GET请求地址的拼接: 我们接着上次的继续完善: 下边我们要定义的是 block //定义block ...

  9. 网络请求Adapter添加数据

    一般在开发中我们都需要在listview中添加数据显示在界面上 1.首先我们会在布局中写一个listview <FrameLayout xmlns:android="http://sc ...

随机推荐

  1. JSP中的“小饼干”Cookie,用来存储数组的方式(下方已String类型的数组为例:)

    1.Cookie常用方法中,存储数据的方式: Cookie cookie = new Cookie("key","Value"); response.addCo ...

  2. 一个InnoDB性能超过Oracle的调优Case

    年前抽空到兄弟公司支援了一下Oracle迁移MySQL的测试,本想把MySQL调优到接近Oracle的性能即可,但经过 @何_登成 @淘宝丁奇 @淘宝褚霸 @淘伯松 诸位大牛的指导和帮助(排名不分先后 ...

  3. centos perl: symbol lookup error: /usr/local/lib64/perl5/auto/DBD/mysql/mysql.so: undefined symbol: mysql_init

    之前在安装天兔数据库监控工具lepus的时候,运行时一直报perl: symbol lookup error: /usr/local/lib64/perl5/auto/DBD/mysql/mysql. ...

  4. npm package.json文件解读

    每个Nodejs项目的根目录下面,一般都会有一个package.json文件.该文件可以由npm init生成,定义了项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据). pa ...

  5. win10/win7下不通过winmanager整合NERDTree和Tagbar的gVim8.0配置

    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 注:图片来自作者公众号--"iKM_2018",亦即& ...

  6. Spring(一)Spring的第一滴血

    前言 开始工作了,但是一进来公司本来是做爬虫和数据分析的,但是走了一个后端的,导致我必须要去顶替他的工作.因为这个项目使用的是Spring. SpringMVC.Hibernate所以我又要去回忆一下 ...

  7. C++课程设计类作业3

    #include <bits/stdc++.h> using namespace std; class A { public: A() { a=b=; cout<<" ...

  8. [51nod1610]路径计数

    路径上所有边权的最大公约数定义为一条路径的值. 给定一个有向无环图. T次修改操作,每次修改一条边的边权,每次修改后输出有向无环图上路径的值为1的路径数量(对1,000,000,007取模). Inp ...

  9. 三维dp&codeforce 369_2_C

    三维dp&codeforce 369_2_C 标签: dp codeforce 369_2_C 题意: 一排树,初始的时候有的有颜色,有的没有颜色,现在给没有颜色的树染色,给出n课树,用m种燃 ...

  10. Windows系统下文件的概念及c语言对其的基本操作(丙)