【实现效果】

【目录结构相关】

此示例展示用的是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. 利用JParticles制作粒子

    JParticles 2.0发布,打造炫酷的粒子 一. 介绍 JParticles 2.0发布之前叫Particleground.js, 相信有在用的朋友应该不会陌生, 关于1.x的介绍可以看这里 二 ...

  2. Java--高效的定时任务设计

    相信你在日常的开发中肯定遇到过这种问题: 需要对实体类的状态信息进行管理,比如一定时间后修改它为XXX状态. 举个例子: 订单服务,当用户提交了订单后,如果在30分钟内没有支付,自动取消订单,这就是一 ...

  3. [转]-nohup-真正的Shell后台运行

    &方式: Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行. 比如我们要运行mysql在后台: /usr/local/mysql/bin/ ...

  4. 【Java】synchronized与lock的区别

    从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock. 也许有朋友会问,既然都可以通过synchronized来实现同步访问了 ...

  5. FPGA学习之路——一路走来

    既然选择了远方,便不顾风雨兼程,一路走下去. —韩彬 在看bingo的书时,看到这样写到.做什么事情都不容易,学习也是,所以一个词很重要不忘初心.作为一名大二的学生,我很高兴能够将自己学习FPGA的过 ...

  6. 大搜车知乎live中的面试题结题方法记录

    1.HTML&CSS(分别10分) 1. 一个div,宽度是100px,此时设置padding是20px,添加一个什么css属性可以让div的实际宽度仍然保持在100px,而不是140px? ...

  7. bzoj:1457: 棋盘游戏

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1457 看了网上dalao的题解,好像解释得并不是很清楚,就按照那种思路,自己YY了一个想法 ...

  8. 【Java学习笔记之二十】final关键字在Java继承中的用法小结

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...

  9. springboot注解使用说明

    springboot注解 @RestController和@RequestMapping注解 我们的Example类上使用的第一个注解是 @RestController .这被称为一个构造型(ster ...

  10. 初识Spider_Man(爬爬虫)

    一:引子