环境
macOS Mojave 10.14.3Xcode10.1iPhone6S 10.0.1
获得崩溃日志
方式一:Xcode
菜单 > Window > Devices and Simulators
选择设备并查看设备日志(View Device Logs)
方式二:手机
设置 > 隐私 > 诊断与用量 > 诊断与用量数据

《编译原理》中提到
编译器的第一个步骤是词法分析(Lexical Analysis)或扫描。词法分析器读入组成源程序的字符流,并且将它们组织成为有意义的词素(lexeme)的序列。对于每个词素,词法分析产生如下形式的词法单元(token)作为输出:
<token-name,attribute-value>token-name是一个语法分析步骤要使用的抽象符号attribute-value指向符号表中关于这个词法单元的条目
1 | int main(){ |
以前想获取应用的 .ipa 文件可以从 iTunes 下载,macOS 上的 iTunes 升级成 12.7 后,无法再获得 .ipa 文件, 而iOS 9 后就不能从 iTools 之类的辅助工具中导出 .ipa 文件。
后面 Apple 官网又提供了一个 12.6.3 的链接
出于好奇心,想试试直接导出.ipa文件,并重签名安装到未越狱的设备上。
在上一篇中简单分析了 Weak 属性是如何被存储,获取和销毁的,其中的 SideTable 结构体当做黑盒进行处理。本文尝试对 SideTable 的结构进行一些分析。
1 | struct SideTable { |
SideTable 主要分为 3 部分
weak_table_t: weak 引用的全局 hash 表RefcountMap : 引用计数的 hash 表slock: 保证原子操作的自旋锁
OC 中的 weak 属性是怎么实现的,为什么在对象释放后会自动变成 nil?本文对这个问题进行了一点探讨。
mac OS Sierra 10.12.4
objc709
搜索后发现runtime 如何实现 weak 属性给出了一个参考答案。
runtime对注册的类, 会进行布局,对于weak对象会放入一个hash表中。 用weak指向的对象内存地址作为key,当此对象的引用计数为0的时候会dealloc,假如weak指向的对象内存地址是a,那么就会以a为键, 在这个weak表中搜索,找到所有以a为键的weak对象,从而设置为nil。