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 源代码分析 ---- 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

链式语法与 Objective-C

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

Author image iOS

DKNightVersion 的实现 --- 如何为 iOS 应用添加夜间模式

最新: 成熟的夜间模式解决方案 注意: 这篇文章已经过时了, 最新版本的 2.3.0 实现已经更改了. 在很多重阅读或者需要在夜间观看的软件其实都会把夜间模式当做一个 App 所需要具备的特性. 而如何在不改变原有的架构, 甚至不改变原有的代码的基础上, 就能为应用优雅地添加夜间模式就成为一个在很多应用开发的过程中不得不面对的一个问题. 就是以上事情的驱动, 使我思考如何才能使用一种优雅并且简洁的方法解决这一问题. 而 DKNightVersion 就是我带来的解决方案. 到目前为止, 这个框架的大部分的工作都已经完成了,... »

Author image iOS

使用代码为 Xcode 工程添加文件

这几天在持续更新 DKNightVersion 这个仓库, 我对这个框架投入了很多的时间和精力. 我还是希望把这个框架的方方面面都做好的, 为框架的使用者提供最好的用户体验, 将开发者的使用成本和使用难度降到最低, 提升开发者的使用体验. 但是在我维护这个框架的过程中还是感觉到如何平衡框架的可扩展性和易用性实在是太难了. 为了减少开发者工作量以达到减少错误的目的, 我在这最近几乎每天 8 小时以上的与 xcodeproj 这个文件打交道, 把原来所需的工作尽可能的降低, 从原来的: ruby generator.rb 拖拽... »

Author image iOS

iOS 源代码分析----Masonry

Masonry 是 Objective-C 中用于自动布局的第三方框架, 我们一般使用它来代替冗长, 繁琐的 AutoLayout 代码. Masonry 的使用还是很简洁的: [button mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.view); make.top.equalTo(self.view).with.offset(40); make.width.equalTo(@185); make.height.equalTo(@38); }]; 从... »

关于一些 iOS 面试问题的解答

这篇 post 主要是对知乎上 iOS程序员的问题列表 的回答, 也算是对自己已有的知识进行整理. 如果你对本篇 post 中的回答有所疑问, 可以在下面留言. 如果有问题, 我一定会修改的 :-) 问题以及回答 1. 什么是 ARC? (ARC 是为了解决什么问题而诞生的?) ARC... »

Author image iOS

Swift 类构造器的使用

这几天在使用 Swift 重写原来的一个运动社交应用 SportJoin. 为什么要重写呢? 首先因为实在找不到设计师给我作图; 其次, 原来写的代码太烂了我也闲不下来, 想找一些项目做, 所以只好将原来的代码重写了. 原来的代码大约是一年半以前写的, 我现在真的不想吐槽当时写的代码有多烂, 有一句话怎么说来着: 程序员连自己写的源代码都不想读, 怎么可能看别人写的源代码! 每半年获得的知识相当于之前获得的全部知识的总和. 个人觉得这句话还是蛮有道理的. 反正对于我来说, 每过一段的时间回过头来看自己写的代码都感觉有很大的重构空间, 很多地方写的不够... »

Author image iOS

iOS 源代码分析----SDWebImage

世人都说阅读源代码对于功力的提升是十分显著的, 但是很多的著名开源框架源代码动辄上万行, 复杂度实在太高, 在暑假的时候我曾经试图读一些开源框架的源代码, 比如说 AFNetworking, SDWebImage, ReactiveCocoa 但是由于当时比较浮躁, 实在没法静下心来看, 而且有一些急功近利, 所以面对宝藏实在无力挖掘. 而最近, 由于时间比较充裕, 也终于能静下心来一段一段分析这些著名项目的源代码, 也准备开始写一些关于 iOS 源代码分析的 post. 第一篇文章为什么选择... »

Prolog 列表和运算符 <4>

今天我们在这篇 post 中介绍一下列表和运算符, 相信熟悉或者玩过函数式编程语言的朋友可能已经在函数式编程中掌握了列表, 而今天我带来的是逻辑式编程语言 Prolog 中的列表, 以及它的使用. 当然我还会在今天简单介绍一下 Prolog 中的运算符(Arithmetic). 不过这一部分的内容还是很简单的, 我们主要关注的部分就是 List. 列表 列表, 这个在函数式编程中非常常见的数据结构, 今天在逻辑式编程中也逐渐崭露头角. 什么是列表? A... »

Prolog 递归 <3>

在这一次的 post 中, 我们将要介绍 Prolog 中的递归定义, 也就是说, 一个 predicate 如果它定义了一个或多个引用自己的规则, 那么这个 predicate 就是递归的. 递归的定义非常地简单: is_digesting(X,Y):-just_ate(X,Y). is_digesting(X,Y):- just_ate(X,Z), is_digesting(Z,Y). just_ate(mosquito,blood(john)). just_ate(frog,mosquito).... »

Author image