验证 HTTPS 请求的证书(五)

Blog: Draveness 关注仓库,及时获得更新:iOS-Source-Code-Analyze 自 iOS9 发布之后,由于新特性 App Transport Security 的引入,在默认行为下是不能发送 HTTP 请求的。很多网站都在转用 HTTPS,而 AFNetworking 中的 AFSecurityPolicy 就是为了阻止中间人攻击,以及其它漏洞的工具。 AFSecurityPolicy 主要作用就是验证 HTTPS... »

AFNetworkReachabilityManager 监控网络状态(四)

Blog: Draveness 关注仓库,及时获得更新:iOS-Source-Code-Analyze AFNetworkReachabilityManager 是对 SystemConfiguration 模块的封装,苹果的文档中也有一个类似的项目 Reachability 这里对网络状态的监控跟苹果官方的实现几乎是完全相同的。 同样在 github 上有一个类似的项目叫做 Reachability 不过这个项目由于命名的原因可能会在审核时被拒绝。 无论是 AFNetworkReachabilityManager,苹果官方的项目或者说 github 上的 Reachability,它们的实现都是类似的,而在这里我们会以 AFNetworking... »

处理请求和响应 AFURLSerialization(三)

Blog: Draveness 关注仓库,及时获得更新:iOS-Source-Code-Analyze 在前面两个部分已经分析过 AFNetworking 是对 NSURLSession 的封装,也了解了它是如何发出请求的,在这里我们对发出请求以及接收响应的过程进行序列化,这涉及到两个模块: AFURLResponseSerialization AFURLRequestSerialization 前者是处理响应的模块,将请求返回的数据解析成对应的格式。而后者的主要作用是修改请求(主要是 HTTP 请求)的头部,提供了一些语义明确的接口设置 HTTP 头部字段。 我们首先会对 AFURLResponseSerialization 进行简单的介绍,因为这个模块使用在 AFURLSessionManager 也就是核心类中,而后者... »

AFNetworking 的核心 AFURLSessionManager(二)

Blog: Draveness 关注仓库,及时获得更新:iOS-Source-Code-Analyze AFURLSessionManager 绝对可以称得上是 AFNetworking 的核心。 负责创建和管理 NSURLSession 管理 NSURLSessionTask 实现 NSURLSessionDelegate 等协议中的代理方法 使用 AFURLSessionManagerTaskDelegate 管理进度 使用 _AFURLSessionTaskSwizzling 调剂方法... »

AFNetworking 概述(一)

Blog: Draveness 关注仓库,及时获得更新:iOS-Source-Code-Analyze 在这一系列的文章中,我会对 AFNetworking 的源代码进行分析,深入了解一下它是如何构建的,如何在日常中完成发送 HTTP 请求、构建网络层这一任务。 AFNetworking 是如今 iOS 开发中不可缺少的组件之一。它的 github 配置上是如下介绍的: Perhaps the most important feature of... »

神奇的 BlocksKit (二)

关注仓库,及时获得更新:iOS-Source-Code-Analyze 这篇文章『神奇的 BlocksKit』的第二部分,关于第一部分的内容在这里: 神奇的 BlocksKit(一) 神奇的 BlocksKit(二) 动态代理 动态代理这部分可以说是 BlocksKit 的精华。它使用 block 属性替换 UIKit 中的所有能够通过代理完成的事件,省略了设置代理和实现方法的过程,让对象自己实现代理方法,而且这个功能的实现是极其动态的。 其实不是对象自己实现的代理方法,只是框架为我们提供的便捷方法,不需要构造其它对象就能完成代理方法的实现,具体我们会在后面详细地解释。 下面是这部分几个关键的类: A2BlockInvocation 的主要作用是存储和转发 block... »

神奇的 BlocksKit (一)

关注仓库,及时获得更新:iOS-Source-Code-Analyze 高能预警:本篇文章非常长,因为 BlocksKit 的实现还是比较复杂和有意的。这篇文章不是为了剖析 iOS 开发中的 block 的实现以及它是如何组成甚至使用的,如果你想通过这篇文章来了解 block 的实现,它并不能帮到你。 Block 到底是什么?这可能是困扰很多 iOS 初学者的一个问题。如果你在 Google 上搜索类似的问题时,可以查找到几十万条结果,block 在 iOS 开发中有着非常重要的地位,而且它的作用也越来越重要。 概述... »

iOS 开发中的重构

随着一个项目的开发的进行, 项目中代码行数会随着时间的推移, 而逐渐增长. 但是由于一些历史原因, 先人在软件开发的过程中, 没有注意到项目中可以复用的模块以及代码. 这样一个工程中就出现了很多复制粘贴产生的代码, 违反了 DRY 的原则, 使得项目难以维护. 为什么要重构 为什么要重构, 重构其实是一件持续性的工作, 工程师在进行开发的过程中难免会有无法考虑周全的地方, 而目前的很多 iOS, Android 项目其实都是业务驱动的, 而业务和需求的更改导致原来模块的设计不再适用于当前的状况.... »

Author image iOS

iOS 源代码分析 ---- Alamofire

已经有几个月没有阅读著名开源项目的源代码了, 最近才有时间来做这件事情. 下面是 Github 主页上对 Alamofire 的描述 Elegant HTTP Networking in Swift 为什么这次我选择阅读 Alamofire 的源代码而不是 AFNetworking 呢, 其实有两点原因. AFNetworking 作为一个有着很多年的历史的框架,... »

iOS 源代码分析 ---- MBProgressHUD

MBProgressHUD 是一个为 iOS app 添加透明浮层 HUD 的第三方框架. 作为一个 UI 层面的框架, 它的实现很简单, 但是其中也有一些非常有意思的代码. MBProgressHUD MBProgressHUD 是一个 UIView 的子类, 它提供了一系列的创建 HUD 的方法.... »

Author image iOS

Ouroboros 的实现 ---- 提供神奇的滚动效果

Ouroboros 是一个根据 scrollView 滚动的距离完成动画的一个仓库. 灵感来源于 javascript 的第三方框架 scrollMagic. 我在使用 scrollMagic 的过程中, 觉得这种根据当前滚动距离改变视图状态的方式非常的优雅, 而且这种动画是可以回退的, 在我看来, 这种动画的方式完全适合于在 iOS App 中完成引导界面的动画. 在以往的开发经验中, 经常需要根据... »

Author image iOS

NSUserDefaults 的默认值

NSUserDefaults 提供了一个与默认设置交互的接口. 这些默认设置允许一个 App 为每一个单独的用户的设置提供定制化的行为. 数据的同步 我们可以通过 NSUserDefaults 对象在运行时从数据库读取用户的数据, 并添加到缓存中. 在我们正常获取或者设置 NSUserDefaults 的值时, 数据库和缓存中的数据其实并没有同步更新, 因为这样会影响效率. NSUserDefaults 在需要同步时会自动调用 synchronize 方法更新数据库数据. 我们也可以手动调用... »

Author image iOS

StackOverflow 黑魔法系列 <2>

距离上一次的 StackOverflow 黑魔法系列的 post 已经很久了, 自己也很久没有写技术博客了, 虽然这次带来的又是一篇水文. 但是好久没有写了, 写写水文也好试试手. AutoReleasePool iOS 中的 run loop 等待一些事件的发生并且响应这些实践. 这个事件可能包括用户触摸屏幕等等. 处理每一个 iOS 中的事件时, 一个新的... »

Author image iOS

MagicMove 在 iOS 中的实现

最近由于去武汉参加 hackday, 十多天没有更新博客了. 今天就来说一说, 我在 hackday 上使用 swift 开发 App 遇到的哪些问题吧. 神奇移动 我曾经在很多的 App 中都实现了类似 Keynote 中的神奇移动的效果, 也就是指定当前帧和下一帧中的视图, 当 Keynote... »

Author image iOS

链式语法与 Objective-C

作为一个 Objective-C 语言的使用者已经有近两年的时间了. 在逐渐熟悉手中的工具, Objective-C 语言的同时, 我也开始从更高的角度来观察这一门语言. 虽然至今我也不敢说我精通 Objective-C 和 Cocoa Touch, 但是我对它们也有了一些自己的见解. Objective-C Objective-C 语言的语法使得我感觉到这门语言是如此的优雅. 在别人看来啰嗦的 label, 其实更是为了增加语言的可读性, 使... »

Author image iOS