docs: ragdoll

This commit is contained in:
liubinpeng
2020-11-29 20:39:43 +08:00
parent a783e556c2
commit 1c33797c86
8 changed files with 144 additions and 7 deletions

View File

@@ -18,13 +18,14 @@
Xcode 在 Debug 模式下定义了宏 DEBUG=1 ,所以我们可以在代码中把相关的测试代码写在预编译处理命令 **\#ifdef DEBUG... \#endif** 中间即可,如图所示
![DEBUG宏在头文件](https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/WX20180626-144101@2x.png)
![DEBUG宏在代码块](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/WX20180626-144240@2x.png)
* 测试用的 .a 和 .framework
对于拖拽到工程中的 .a .framework 静态库,可以在 **target->Build Settings->Search Paths**这2个选项分别设置 **Library Search Paths**和**Framework Search Paths**这2个选项。如果我们需要在测试的时候会用到那么我们可以将 **Debug** 对应的值留下,删掉**Release** 对应的值。这样我们打包 Release 包的时候就不会包含不需要的包。
![不需要的包删除即可](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/WX20180626-144819@2x.png)
* CocoPods 引入的库
@@ -81,3 +82,14 @@
#pragma clang diagnostic pop
10. Xcode Instruments 内存泄漏检测工具 Leaks 在内存检测后,无法看到具体的堆栈信息。
![Leaks](./../assets/2020-11-25-InstrumentMemoryLeaks.jpg)
涂上右下方的 `Heaviest Stack Trace` 模块看不到对应的堆栈信息。一番定位问题后发现是工程项目在 debug 阶段Build Setting 中的 **Debug Information Format** 选项的 debug 条目是没有 dSYM 文件的,我们要想看到堆栈信息,就必须选择 `DWARF with dSYM File` 选项。
![](./../assets/2020-11-25-BuildSettingsDebugInformationFormat.png)
DWARF***Debug With Arbitrary Record Format*** ,是一个标准调试信息格式,即调试信息。这部分信息可以查看我的[这篇文章](./1.74.md)中讲 iOS 符号化的部分。
11.

View File

@@ -399,7 +399,7 @@ while (self.isCancelled == NO) {
在计算机科学中,调用堆栈是一种栈类型的数据结构,用于存储有关计算机程序的线程信息。这种栈也叫做执行堆栈、程序堆栈、控制堆栈、运行时堆栈、机器堆栈等。调用堆栈用于跟踪每个活动的子例程在完成执行后应该返回控制的点。
维基百科搜索到 “Call Stack” 的一张图和例子,如下
![调用栈](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/2020-02-08-StackFrame.png)
![函数调用栈](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/2020-02-08-StackFrame.png)
上图表示为一个栈。分为若干个栈帧Frame每个栈帧对应一个函数调用。下面蓝色部分表示 `DrawSquare` 函数,它在执行的过程中调用了 `DrawLine` 函数,用绿色部分表示。
可以看到栈帧由三部分组成:函数参数、返回地址、局部变量。比如在 DrawSquare 内部调用了 DrawLine 函数:第一先把 DrawLine 函数需要的参数入栈;第二把返回地址(控制信息。举例:函数 A 内调用函数 B调用函数B 的下一行代码的地址就是返回地址)入栈;第三函数内部的局部变量也在该栈中存储。
@@ -1944,7 +1944,23 @@ ASLR: `slide` 函数虚拟地址加载到进程内存的随机偏移量,每
### 7. 现状及其改进
在使用了一波业界优秀的的内存监控工具后发现了一些问题,比如 `MLeaksFinder`、`OOMDetector`、`FBRetainCycleDetector`等都有一些问题。比如 `MLeaksFinder` 因为单纯通过 VC 的 push、pop 等检测内存泄露的情况,会存在误报的情况。`FBRetainCycleDetector` 则因为对象深度优先遍历,会有一些性能问题,影响 App 性能。`OOMDetector` 因为没有合适的触发时机。
思路有2种
- `MLeaksFinder` + `FBRetainCycleDetector` 结合提高准确性
- 借鉴头条的实现方案:基于内存快照技术的线上方案,我们称之为——线上 Memory Graph。引用如下
> - 基于 Objective-C 对象引用关系找循环引用的方案适用范围比较小只能处理部分循环引用问题而内存问题通常是复杂的类似于内存堆积Root LeakC/C++层问题都无法解决。
> - 基于分配堆栈信息聚类的方案需要常驻运行对内存、CPU 等资源存在较大消耗,无法针对有内存问题的用户进行监控,只能广撒网,用户体验影响较大。同时,通过某些比较通用的堆栈分配的内存无法定位出实际的内存使用场景,对于循环引用等常见泄漏也无法分析。
核心原理是: 扫描进程中所有的 Dirty 内存,通过内存节点中保存的其他内存节点的地址值,建立起内存节点之间的引用关系的有向图。
全部的讲解可以看[这里]((https://mp.weixin.qq.com/s/4-4M9E8NziAgshlwB7Sc6g))。对于 Memory Graph 的实现细节感兴趣的可以看这篇[文章](https://juejin.cn/post/6895583288451465230)
## 五、 App 网络监控

View File

@@ -1,4 +1,4 @@
\# ElectronPC 端多端融合方案
# ElectronPC 端多端融合方案
> 每天都要写第二天的 todoList。有一天在写的时候突然想到为了让自己清楚知道自己需要做啥、做了多少、还剩多少没做想写一个电脑端程序在技术选型的时候就选了 Electron。
>
@@ -789,6 +789,8 @@ app.listen(33855)
## 八、 Electron 应用场景
业界拿 Electron 做了很多东西,比如大家都在用的 VSCode、Atom、一些翻墙软件的实现、很多大厂的面试软件、一些不是非常注重渲染效率的产品、一些集团内部的开发工具等。Electron 大有可为,有很多想象空间去做一些事情。举几个例子
### 1. 字节跳动
- Electron做了一个工具能直接查看线上包的函数耗时无任何侵入
@@ -823,7 +825,6 @@ app.listen(33855)
言以蔽之就是:通过 deviceID、ip 地址等与设备产生连接,将一切可以标准化的流程都抽象、自动化、比如性能调试和效率工具都整合到一起
一个原则该工具只做数据的查看、Mock 等工作,不做线上数据的干扰和生产
些原则一言以蔽之该工具只做数据的查看、Mock 等工作,不做线上数据的干扰和生产
主要实现方式:通过 deviceID、ip 地址等与设备产生连接,将一切可以标准化的流程都抽象、自动化、比如性能调试和效率工具都整合到一起。

105
Chapter9 - Ragdoll/9.6.md Normal file
View File

@@ -0,0 +1,105 @@
# 新猫到家指南
> 越来越很多小伙伴都喜欢猫咪,经历各种步骤最后选了一只心仪的猫咪,去接新猫到家的时刻,心情无疑是非常激动的。可是猫咪作为一种神奇的存在,新猫到家的时候需要一些额外的注意事项。所以本篇文章就是从这样一个初衷出发,写一篇给各位新手铲屎官的新猫到家指南
## 一、 到家做什么?
**新猫到家基本不用做什么特殊的处理**
新猫到家前,你应该和猫舍或者前主人那里了解到猫咪的习性。知道猫咪喜欢吃什么样的猫粮、喜欢吃什么样的生骨肉、喜欢喝什么、一日吃几餐、用什么猫砂,这样就可以无缝迁移、让猫咪感受到的变化越小就越有助于猫咪熟悉新环境。
所以有些主人会给新主人带一些猫咪平常用的东西,比如猫砂盆、用过的猫砂,因为这些东西都有猫咪的气味,猫咪会更加习惯和熟悉些。
猫咪到家后,主人不需要特意去“关怀”他。你以为的关怀可能会让猫咪觉得陌生、害怕。
1. 主人可以提前给环境做一个彻底的消毒,新猫来的猫窝、玩具等,先用消毒水洗一下、风吹一下、晒下太阳。
2. 猫咪到新家之后,在家里合适的位置放置好猫砂盆、猫砂。放置好猫粮、常温的开水(烧开的开水)
3. 家里的阳台密封好
4. 不要去干扰他,他会在家里到处走走、一般是躲到床底下,去闻闻嗅嗅各个地方的气味
5. 猫咪到家一个月内不要洗澡。一个月后找个温暖的环境,可以在家洗,也可以去宠物店洗。最好在家洗,安全卫生
6. 如果猫咪的疫苗没有打完,则不要洗澡,三针疫苗一针狂犬疫苗注射完半个月后可以洗澡
7. 猫咪如果熟悉环境了会自己过来找你。所以不要抢行拖拽去抱他
8. 猫咪的猫砂盆需要保持干净,特别脏就不会去大小便了
9. 猫粮不要一次放太多,早上出门一顿,晚上到家一顿。放太多在空气中会变潮,滋生细菌。同样,猫粮袋子也要密封保存
## 二、猫吃什么?
科学生骨肉和不错的猫粮。生骨肉可以看我以前的文章。猫粮推荐:渴望、爱肯拿、绿福摩、百利、金装素力高。
## 三、猫喝什么?
基础版:成猫的话可以喝烧开后恢复到常温的温水。
进阶版:可以在温水中加入一颗鸡蛋,混合均匀后给猫咪喝。(蛋黄有助于猫咪健康和毛发生长,网上说的卵磷脂,鸡蛋中挺多的)
Pro 版:可以喝新鲜羊奶,淘宝有,不是那种劣质的羊奶粉。我之前买的羊奶 20元1斤
## 四、猫咪玩什么?
猫咪需要一些玩具,嘴简单的玩具有:逗猫棒、激光灯、毛线球、猫薄荷。
猫爬架这些东西可有可无。
## 五、 猫咪健康
### 1. 驱虫
不吃生骨肉的情况下猫咪1个月一次外驱虫三个月一次内驱虫。
吃生骨肉的情况下猫咪1个月一次内外驱虫。
驱虫推荐用大宠爱、拜耳驱虫药。
需要注意的是,这些驱虫药都有成猫和幼猫的区别,因为药剂含量不一样,所以主人需要细心些。
### 2. 疫苗
小猫出生的一年需要3针疫苗、一次狂犬幼苗。从第二年开始每年打一针。疫苗本上有时间
### 3. 猫咪美容
- 猫咪一个月剪一次指甲。
- 定期给猫咪用“排梳”梳梳头,猫咪非常享受这个过程,会一直“呼噜呼噜”的叫。
- 可以学一下按摩手法,看一下知乎或者抖音教程,猫咪非常享受给他摸下巴、头部等区域。
- 布偶是长毛猫,所以脚底的毛,可以用电动剃毛机,剃掉。
- 猫咪冬天3个月洗一次澡夏天可以2个月洗一次澡。猫咪洗护的东西和人的不一样酸碱度 PH 值不一样,所以需要专门给猫咪洗澡的东西。布偶猫尾巴会出油,所以还需要去油膏。我用的是克里斯汀森的洗护,去油用的是 Goop 去油膏。
- 可以去外面的宠物店给猫咪洗澡,但是因为猫咪的美容机构有太多的猫咪去过,所以我不去那种地方,怕有残留细菌。或者工作人员心情不好,会不会对猫咪不温柔?
### 4. 猫咪发情
如果你的猫咪不打算生小猫,那么可以在猫咪发情的时候给他绝育掉。公猫绝育价格比母猫绝育价格便宜。
如果打算生小猫那么要等猫咪在第二次发情的时候交配1岁后各方面发育成熟可以交配。
## 六、 结语
小时候学完老舍的《猫》这篇文章就挺喜欢猫咪的上班族的我们下班后有猫咪在家陪伴或者在学习看书累了后给猫咪喂食物、梳毛发等都是一种解压的行为。猫咪也是一门复杂的学问需要主人的耐心和一席位经济基础比如不要给猫咪吃30元1斤以下的猫咪这样的猫粮钱省了可以猫咪生病就是好几千比较费猫 😂)
耐心观察他、善待他猫咪和主人互相成就他让你不再孤单、无聊、那么萌、可爱可以成为你朋友圈的主角。你给了他一个温暖、舒适、安全、衣食无忧的家所以Enjoy yourself。

View File

@@ -8,4 +8,6 @@
* [3、养猫心得与总结](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.3.md)
* [4、我的猫不吃生骨肉别急我来教你](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.4.md)
* [5、猫粮对你猫咪的牙齿做了什么](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.5.md)
* [6、新猫到家的注意事项](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.6.md)

View File

@@ -212,6 +212,7 @@
* [3、养猫心得与总结](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.3.md)
* [4、我的猫不吃生骨肉别急我来教你](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.4.md)
* [5、猫粮对你猫咪的牙齿做了什么](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.5.md)
* [6、新猫到家的注意事项](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter9%20-%20Ragdoll/9.6.md)

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB