0%

HTTP/HTTPS 可以通过 HTTP Response 中的 header 字段(如 Cache-ControlExpiresLast-Modified)告诉 client 是否需要对 response 进行缓存。有未过期的缓存,客户端可以使用缓存避免冗余的网络请求。

接下来探讨几个问题:

  1. HTTP 协议如何利用 header 控制缓存的?

  2. iOS(URLSession)对于非幂等的网络请求是否也支持本地缓存(如 POST)? 疑问来自于 rfc2616

    Responses to this method are not cacheable, unless the response
    includes appropriate Cache-Control or Expires header fields. However,
    the 303 (See Other) response can be used to direct the user agent to
    retrieve a cacheable resource.

阅读全文 »

IGListKit 是 Instagram 维护一个 UI 框架,采用面向协议的思想,基于 UICollectionView 实现,由数据驱动的 UI 列表框架。本文基于 IGListKit 源码对其主要设计思想进行分析。

阅读全文 »

objc_msgSend 是基于汇编实现的,hook objc_msgSend 和我们平时 hook OC 方法不一样,在 github 上有开源的项目通过 hook objc_msgSend 来监控每个函数的耗时情况。这篇文章对其 hook 逻辑的主要代码进行分析记录。阅读前建议先了解开源库 fishhook 的源码。

阅读全文 »

在 Objective-C 语言中,对象/类(其实类也是一个对象) 执行方法最后会转化成给对象发送消息:

objc_msgSend(receiver, @selector(message))

如果 reveiver 中没有找到对应方法 message, 则会开始消息转发的过程,也就是过程:

  1. 动态方法解析 Method Resolution
  2. 快速转发 Fast Rorwarding
  3. 完整消息转发 Normal Forwarding

接下来通过OC的源码来分析以上几个步骤具体的调用过程

阅读全文 »

在 Objective-C 语言中,实例对象执行方法,而执行方法的过程也可以称为给实例对象发送消息。发送消息的过程执行在编译阶段会转化成对 objc_msgSend 函数的调用。本文将分析 objc_msgSend 汇编部分主要部分(fast path)。

文章中用到的汇编指令可以参考我个人的汇编学习笔记

阅读全文 »

之前分析过 RACSignal,数据流向是单向而且是1对1的,如果想使用双向绑定的效果,可以使用 ReactiveCocoa 框架中提供的 RACChannel;接来下分析 RACChannel 底层的实现原理。

阅读全文 »

RACScheduler ReactiveCocoa 框架中的调度器,ReactiveCocoa 中的信号可以在 RACScheduler 上执行任务、发送结果; RACScheduler 的实现主要是基于 GCD 封装,提供了 GCD 不具备的特性。

阅读全文 »

在项目中,经常会把用户操作动作和业务操作进行绑定,比如点击登录按钮会进行登录网络请求、点击下载图片等等。ReactiveCocoa 中提供捆绑副作用和信号的 RACCommand,开发者可以利用 RACCommand 来实现类似这种 动作-响应 绑定的功能。

阅读全文 »