http://blog.sina.com.cn/s/articlelist_1182000643_0_1.html…
本篇介绍Task代理(TaskDelegate.swift) 前言 我相信可能有80%的同学使用AFNetworking或者Alamofire处理网络事件,并且这两个框架都提供了丰富的功能,我也相信很多人都做了二次封装,但事实上,这个二次封装却又异常简单或者是简陋.这篇文章的内容是Task代理,是一篇很独立的文章,大家可以通过这篇文章了解iOS中网络开发是怎么一回事. 那么一条最普通的网络请求,究竟是怎样的一个过程?首先我们根据一个URL和若干个参数生成Request,然后根据Request生成…
本篇主要讲解Alamofire中如何把服务器返回的数据序列化 前言 和前边的文章不同, 在这一篇中,我想从程序的设计层次上解读ResponseSerialization这个文件.更直观的去探讨该功能是如何一步一步实现的.当然,有一个不好的地方,跟数学问题一样,我们事先知道了结果,因此这是一个已知结果推到过程的问题. 在之前Alamofire的源码解读文章中,我们已经知道了:对于响应感兴趣的Request类型是DataRequest和DownloadRequest.我们下边所有的设计都是针对这两个…
title: swoft| 源码解读系列一: 好难! swoft demo 都跑不起来怎么破? docker 了解一下呗~description: 阅读 sowft 框架源码, swoft 第一步, 搞定环境 小伙伴刚接触 swoft 的时候会感觉 压力有点大, 更直观的说法是 难. 开发组是不赞成 难 这个说法的, swoft 的代码都是 php 实现的, 而 php 又是 世界上最好的语言, swoft 的代码阅读起来是很轻松的. 开发组会用 源码解读系列 博客, 深入解读 swoft. 我…
date: 2018-8-01 14:22:17title: swoft| 源码解读系列二: 启动阶段, swoft 都干了些啥?description: 阅读 sowft 框架源码, 了解 sowft 启动阶段的那些事儿 小伙伴刚接触 swoft 的时候会感觉 压力有点大, 更直观的说法是 难. 开发组是不赞成 难 这个说法的, swoft 的代码都是 php 实现的, 而 php 又是 世界上最好的语言, swoft 的代码阅读起来是很轻松的. 之后开发组会用 系列源码 解读文章, 深入解析…
核心逻辑概述 ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态. ThreadPoolExecutor类中存在一个workers工作线程集合,用户可以向线程池中添加需要执行的任务,workers集合中的工作线程可以直接执行任务,或者从任务队列中获取任务后执行.ThreadPoolExecutor类中提供了整个线程池从创建到执行任务,再到消亡的整个流程方法.本文,就结合ThreadPoolExe…
本篇主要讲解Alamofire中错误的处理机制 前言 在开发中,往往最容易被忽略的内容就是对错误的处理.有经验的开发者,能够对自己写的每行代码负责,而且非常清楚自己写的代码在什么时候会出现异常,这样就能提前做好错误处理. Alamofire的错误封装很经典,是使用swift中enum的一个典型案例.读完这篇文章,一定能让大家对swift的枚举有一个更深的理解,同时增加一些枚举的高级使用技巧. 那么有一个很重要的问题,我们应该在什么情况下考虑使用枚举呢?只要结果可能是有限的集合的情况下,我们就尽量…
本篇讲解参数编码的内容 前言 我们在开发中发的每一个请求都是通过URLRequest来进行封装的,可以通过一个URL生成URLRequest.那么如果我有一个参数字典,这个参数字典又是如何从客户端传递到服务器的呢? Alamofire中是这样使用的: URLEncoding 和URL相关的编码,有两种编码方式: 直接拼接到URL中 通过request的httpBody传值 JSONEncoding 把参数字典编码成JSONData后赋值给request的httpBody PropertyList…
本篇讲解swift中通知的用法 前言 通知作为传递事件和数据的载体,在使用中是不受限制的.由于忘记移除某个通知的监听,会造成很多潜在的问题,这些问题在测试中是很难被发现的.但这不是我们这篇文章探讨的主题. 我曾见过,有的团队为了管理通知,开发了一个类似于NotificationManager的类,所有通知的添加移除都通过这个类进行管理,通过打印通知数组就能很清楚的看到添加了哪些通知,以及这些通知被绑定在那些对象之上,这是一个很好地思路. 发通知 swift中发通知的函数原型是这样的: open…
本篇讲解Result的封装 前言 有时候,我们会根据现实中的事物来对程序中的某个业务关系进行抽象,这句话很难理解.在Alamofire中,使用Response来描述请求后的结果.我们都知道Alamofire返回的数据可以经过特殊的处理,比如说序列化,那么我们应该如何在Response中获取到这些类型不同的数据呢? 假如说序列化后的数据是data,最直接的想法就是把data设置为Any类型,在实际用到的时候在进行判断,这也是最普通的一种开发思维.现在我们就要打破这种思维.我们需要封装一个对象,这个…