共计 8 篇文章

一个好的移动端基础日志框架是怎么炼成的

最近美团开源了日志框架 Logan,微信开源的 Mars 里也有个日志模块 xlog。这个功能用的很多,简单点说就是往文件里写日志,这并不是一个复杂的框架。但是要做的好,还是有几个点需要考虑的,比如使用方便,性能和安全。 微信mars 的高性能日志模块 xlog 美团点评移动端基础日志库——Logan 网上基本上只有两个框架的使用教程,并没有源码分析。这两篇都是作者写的文章,基本上把框架的精髓都讲出来了,看完应该就知道一个好的日志框架是怎么炼成的了。 其实这两个框架的思路基本上是一模一样的,很明显 Logan ...

MLeaksFinder / FBRetainCycleDetector 分析

最近需要提供一套检测 app 内存泄漏的工具,经过反复的比较,最终选定了 MLeaksFinder。它的优点是实现简单,扩展方便。它内部寻找循环引用则是用的 Facebook 开源的 FBRetainCycleDetector。 MLeaksFinder 介绍 MLeaksFinder 的原理十分简单: 通过运行时 hook 系统的 viewdidDisappear 等页面消失的方法,在 hook 的方法里面添加willDealloc()方法,各个子类自己实现 ...

nsq源码解析

最近刚刚把go的语法看完,寻思着看些开源项目,值得学习的go语言开源项目,beego的作者asta谢推荐nsq,这对于我们认识channel、分布式开发都有很大的帮助。nsq其实就是一个分布式消息中间件,鼎鼎大名的Kafka就是用java实现的一个MQ。 nsq环境部署 看源码前,首先还是要先会用,然后对整个项目有个大体的了解。 nsq文档,看这个文档就没问题了,最简单的方式是使用docker来部署。 nsq docker部署,文档上直接就有docker-compose,真是十分贴心。不过里面有处错误,会导致consumer.ConnectToNSQLookupd时出错。 version: '3' services: nsqlookupd: ...

JSPatch实现分析

JSPatch十分小巧,能让APP具有热更新的能力。最早的一版1000行代码就搞定了,很值得学习探索。 前言 看JSPatch源码前,首先要明白编译型语言,解释性语言,脚本语言,动态语言,静态语言这几个概念。 编译型语言 这个最好理解,最早学的就是C/C++,由编译器把他编译成二进制文件,就可以直接运行,不需要再编译了,所以性能好。不过很多机器底层的CPU架构都不一样,所以不同的机器上面需要编译器重新编译,所以跨平台较差。 编译-解释型语言 计算机专业的话应该走的路都差不多,C/C+ ...

KVOController实现的一些思考和疑惑

head first设计模式的第二个设计模式就是观察者模式,非常常见的一个设计思想,很多语言都内置了它的实现。iOS也不例外,键值修改后会通知观察者(KVO)。不过那又臭又长的写法让人很难提起兴趣用它。所以就有了KVOController 前言 这篇文章只是我看完KVOController源码的一些疑惑,就是KVOController为什么要这样做。 系统KVO的实现可以看这篇KVO进阶 —— 源码实现探究 KVOController源码的分析可以看这篇优雅地使用 KVO 用NSMapTable代替NSMutableDictionary NSMapTable和NSHashTable在很多第三方框架或者底层源码里都有用到。类似于更常用的NSDictionary,NSSet。 从他们的初始化方法中就能知道,他们最大的优点就是可以弱引用添加的对象,其实性能还是略差的。 //KVOController默认是强引用 - (instancetype) ...