Kai's Blog


  • 首页

  • 分类

  • 标签

  • 归档

  • 关于

源码解析------TMCache

发表于 2018-05-13 | 分类于 源码解析

引言

本文为阅读TMCache源码后所产,TMCache由著名网站tumblr开发虽然目前已停止维护,源码中还是有很多值得借鉴的点。客户端缓存从硬件介质上来看,无非就是内存和磁盘两种。在TMCache中分别对应TMMemoryCache(内存级别缓存)、TMDiskCache(磁盘级别缓存)。通常来讲磁盘缓存由于涉及磁盘IO、文件编解码较内存缓存而言会更复杂一些。本文中笔者将循着TMCache的实现分析TMMemoryCache、TMDiskCache源码中一些平时开发中值得借鉴的点(红榜)及一些需要避免的点(黑榜)。

阅读全文 »

性能调优------卡顿监控

发表于 2018-04-19 | 分类于 性能调优

引言

本文将循着微信iOS卡顿监控系统的思路:起一个子线程,监控主线程的活动情况,如果发现有卡顿,就将堆栈 dump 下来。做一个简单的deom,体验一把。

阅读全文 »

Work with compiler------premain启动优化

发表于 2018-04-17 | 分类于 性能调优

Mach-O

在Xcode中构建的程序,经由预处理、编译、汇编、链接将源文件(.m和.h文件)转变为Mach-O 二进制可执行文件。Mach-O 中代码被划分为不同的Segment,而每个Segment又包含多个Section。

阅读全文 »

iOS多线程安全------nonatomic与野指针不得不说的故事

发表于 2018-03-17 | 分类于 多线程

Crash-操作系统的自我保护

当运行程序出现内存访问异常(访问野指针、数组越界)、内存不足(linux 下内存不足会出发oom_killer杀死当前进程)等异常情况,操作系统为自身的稳定运行会将异常程序KILL(Crash)掉以避免引起更大的问题。Crash是操作系统的一种自我保护机制,在程序Crash之前会收到操作系统发出的SIGSEGV、SIGKILL等信号。操作系统在发出这些指令之后会立即KILL掉异常应用程序。在日常的Crash清理中,通常会有茫茫多的SIGSEGV、SIGKILL Crash问题难以定位。

日常开发中另一类,难以定位的Crash将矛头指向了某些系统函数,如比较常见的objc_msgSend崩溃,我们将在 Foundation 与 UIKit 等的系统库中的方法称之为系统方法。作为一个乐观者,我们有理由相信系统方法和操作系统本身的稳定性。Crash的原因大概率(肯定)是我们自己代码出了问题,这些问题通常是由于欠妥的内存管理导致的。

阅读全文 »

iOS多线程安全------多线程下的内存管理

发表于 2018-03-17 | 分类于 多线程

引言

在继续深入之前一起来考虑几个问题:

  • 64/32位操作系统,64/32指的是什么?
  • OC中标量类型属性修饰符为什么是assign?
  • i++是原子操作么?
  • atomic保障了什么?
阅读全文 »

ReactiveCocoa------冷信号vs热信号

发表于 2018-03-07 | 分类于 ReactiveCocoa

冷热信号的概念是源自于源于.NET框架Reactive Extensions(RX)中的Hot Observable和Cold Observable,两者的区别是:

  1. Hot Observable是主动的,尽管你并没有订阅事件,但是它会时刻推送,就像鼠标移动;而Cold Observable是被动的,只有当你订阅的时候,它才会发布消息。
  2. Hot Observable可以有多个订阅者,是一对多,集合可以与订阅者共享信息;而Cold Observable只能一对一,当有不同的订阅者,消息是重新完整发送。
阅读全文 »

ReactiveCocoa------Functor、Applicatives和Monad

发表于 2018-03-04 | 分类于 ReactiveCocoa

引言

计算机科学习惯于为抽象概念命名术语,我们也从这些术语中获益良多。这些术语使我们在交流中能够引用抽象概念,并立即使对方知道我们的意思,比如我们从设计模式的共享名称(工厂、装饰器等)中获益良多。其中一些术语非常抽象,如:函数式编程中的Functor、Applicatives和Monad。

Functor、Applicatives和Monad的概念源自范畴论。本篇笔者从Swift的Optional入手阐述Functor、Applicatives和Monad在函数式编程中的概念。对比于OC,swift提供了对函数式编程更好的支持。

阅读全文 »

ReactiveCocoa------ReactiveCocoa高阶操作

发表于 2018-03-03 | 分类于 ReactiveCocoa

引言

延续上一篇ReactiveCocoa操作详解,本篇笔者围绕针对RAC信号的维度变换(升阶、降阶)进行深入探究,同时在文章结尾给出Functor、Applicatives和Monad的概念。

阅读全文 »

ReactiveCocoa------ReactiveCocoa操作详解

发表于 2018-02-13 | 分类于 ReactiveCocoa

引言

在之前的一篇Post中对函数响应式编程和RAC做了简单剖析,强烈建议没看过的同学猛戳链接。

ReactiveCocoa的核心是RACSignal类代表的信号。信号会产生一个事件流,事件有三种类型next、completed、error,一个信号源可以发送任意数量的next时间,直到该信号结束(completed)或因错误(error)而关闭。通过对信号的订阅可以获得不同事件的回调。使用这个简单的事件流模型,通过对信号的变换、组合操作,我们可以处理日常iOS开发中的按钮点击、网络请求响应、KVO或用户位置变化等各种事件类型。

本篇我们会围绕RACSignal的基本使用及各类操作做详细探究。

阅读全文 »

ReactiveCocoa------ReactiveCocoa简介

发表于 2018-02-05 | 分类于 ReactiveCocoa

简介

ReactiveCocoa是一个将函数响应式编程范例带入Objective-C的开源库。由Josh Abernathy和Justin Spahr-Summers在对GitHub for Mac的开发过程中产生的副产物。RAC富含cocoa框架多种组件,提供基于时间变化的数据流的组合和变换。

函数响应式编程

函数响应式编程是思考软件将输入转化为输出在时间上的持续过程的一种方式。它糅合了函数式编程和响应式编程的特点,满足函数式编程的一些特性,将时间轴上的离散事件通过响应式编程的数据流向下传播的一种编程范式。

阅读全文 »
123
王凯

王凯

The shortest answer is doing!

29 日志
7 分类
10 标签
GitHub E-Mail CSDN
© 2018 王凯
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.3