Crash捕获

前段时间在做皮肤适配的时候,遇到了一些问题,在某些机型上面,如果 hook setBackgroundColor 方法,某些情况下回概率性的崩溃。在 goolgle 上面搜索很多资料,尝试了一些方法,但是仍然会有少部分机型概率性的崩溃。再加上其他模块,比如书架等也会偶现数据库数据异常的问题。针对这些写了一个小的工具,就是当 App 在短时间内连续 crash 超过两次,下次用户进入APP时会提示用户是否重置账号,其实 APP的工作就是还原数据和屏蔽一些可能导致 crash 的功能。(PS: 其实还可以通过开关来控制,但是开关不是本部门维护的,所以… … 懂得,自己来才靠谱)

阅读全文

异步转同步

最近时间比较充足,正好放慢生活的节奏。抽时间整理了下工作中比较实用的小工具,和遇到的比较难解的问题的解决方法。下面介绍的是一个同步转异步的小工具。因为项目中使用其他的库(集团其他部门提供的库或者一些第三方库)而导致的异步同步问题,为了方便使用,单独写了一个异步转同步的小工具。

阅读全文

swift学习

最近开始学习 swift,都说在实践中学习才是最好的。不过项目中没有用过 swift,那就没事自己写写小 Demo 玩吧,目前制定了一个 swift 的学习路线,按部就班,扎扎实实的来。

阅读全文

内存管理原理探究-续

最近在做皮肤适配时遇到了很多的坑,进而产生了很多的疑问。下面是想到了一些问题和最终得到的验证,内功太菜。之前一直在怀疑是他们都太飘了还是我拿不动刀了。现在看看内功太菜,确实是我打不动刀了。。。

之前看 Autorelease 时知道了底层是由 AutoreleasePoolPage 实现的,并且是由 RunLoop 来驱动的。那么的疑问就是我们在子线程中添加 Autorelease 时,这时没有 RunLoop,那么 autorelease 是怎样工作的呢?

阅读全文

内存管理原理探究

最近时间比较散,还有就是公司比较动荡😌,当初怀着一颗做事的心来到这里,没想到最后落得这样的结局。不说了,还是保持本心比较好,尽管想做好飞读,但是我们小职员也改变不了什么。做好自己的事情就好,按着学习计划继续。。。

阅读全文

多线程

阅读全文

RunLoop原理探究

RunLoop 概念

顾名思义,RunLoop 就是运行循环,在程序运行过程中循环做一些事情。这种模型通常被称作 Event Loop,这种模型的关键点在于:如何管理事件/消息,如果保证线程在没有处理消息时休眠避免资源占用、再有消息到来时立刻被唤醒。

阅读全文

Runtime原理探究

原计划一周一个模块,但是看到 runTime 这里持续时间有点长,底层内容很多啊,原因还是之前基础太差,菜的抠脚。。。还有整理完 block 后再想 block hook 应该怎么实现,瞎搞了一通最后找到了开源的库 blockHook,看了几天的源码发现底层掌握的还是不牢,其中包括 runtime 部分,先整理完 runtime 部分然后再回头重新分析 blockHook。

下文内容是根据 objc4-723 版本分析的,目前最新版本是 objc4-781,最新版本做了一些优化,不过不影响我们理解。

isa 详解

阅读全文

block6-循环引用

循环引用

下面是 block 循环引用的经典图片:

retaincircly.png

阅读全文

block5-block内存管理

block 内存管理

测试代码:

1
2
3
4
5
6
7
8
NSObject * object = [[NSObject alloc] init];
__block NSObject * blockObject = [[NSObject alloc] init];
void (^block)(void) = ^{
NSLog(@"--- %@", object);
NSLog(@"--- %@", blockObject);
};
block();
NSLog(@"----");

阅读全文