Wrappres' Studio.

Wrappres' Studio.

Work Hard, Play Harder

利用 Runloop 监控卡顿
导致卡顿的原因 复杂 UI 、图文混排的绘制量过大 在主线程上做网络同步请求 在主线程做大量的 IO 操作 运算量过大,CPU 持续高占用 死锁和主子线程抢锁 原理监控卡顿就是找到主线程都做了哪些事。线程的消息事件是依赖于 NSRunLoop 的。我们通过监听 NSRunLoop 的状态,能够发现调用方法是否执行事件过长,从而判断是否会出现卡顿。RunLoop 会接受到两种输入源,一种是来自另一个线程或者来自不同应用到异步消息,另一种是来自预定时间或者重复间隔到同步事件。RunLoop 的目的是,当有事件要去处理时保持线程忙,当没有事件要处理时让线程进入休眠。Runloop 的六个状态...
iOS Tips
利用 Sadari 调试 app 中的 h5,可以打断点
奔溃监控
造成奔溃的原因 数组越界 多线程问题:在子线程更新 UI,多个线程进行读取操作 主线程无响应:主线程超过系统规定的时间无响应,就会被 Watchdog 杀掉 野指针:指针指向一个已经删除的对象访问内存区域,会出现也野指针奔溃 信号可捕获的奔溃日志在提交时选上 “Upload your app’s symbols to receive symbolicated reports from Apple”,就可以直接在 Xcode 的 Archive中看到符号化后的崩溃日志。 信号捕获不到的奔溃 后台奔溃后台保活 Background Mode:在 app 审核时,会提高要求。通常只有地图,音...
链接器
链接器最主要的作用就是将符号绑定到地址上 编译过程 LLVM 对代码进行预处理,将宏嵌入到对应的位置 LLVM 对代码进行词法分析和语法分析,生成AST。AST 是抽象语法树,结构上比代码更精简,遍历起来更快,所以使用 AST 能够更快的进行静态检查,同时还能更快地生成 IR (中间表示)。 AST 生成 IR,IR 是一种更接近机器码的语言,区别在于和平台无关。通过 IR 可以生成多份适合不同平台的机器码。对于 iOS 系统,IR 生成的可执行文件就是 Mach-O。 Mach-OMach-O 文件里的内容,主要就是代码和数据:代码是函数的定义,数据是全局变量的定义,包括全局变量...
埋点
iOS 埋点主要分为三种: 代码埋点:通过手写代码进行埋点,能够很精确的在需要埋点的代码处加上埋点的代码,具有很强的灵活性。但存在开发工作量大,埋点代码到处都是,后期难以维护但问题。 可视化埋点:将埋点的增加修改的工作可视化了,提高了增加和维护埋点的体验。 无埋点:全埋点,埋点代码不会出现在业务代码中,很容易维护和管理。缺点在于,埋点成本高,后期的解析也比较复杂,view_path的不确定性。这种方案不能解决所有的埋点需求,但对于大量通用的埋点需求来说,能够节省大量的开发和维护成本。 利用运行时替换方法进行埋点先写一个替换方法的类:12345678910111213141516171...
静态分析
静态分析工具SwiftLint,OCLint, Clang, Infer ClangClang 是 C,C++,Objective-C 的编译前端。Swift 有自己的编译前端: SL optimizer。 Clang 会对代码进行词法分析,将代码切分成 Token用以下命令可以查看:clang -fmodules -E -Xclang -dump-tokens main.m可以把 Token 分为四类: 关键字:语法中的关键字,比如 if,else,while 等 标识符:变量名 字面值:值,数字,字符串 特殊符号:加减乘除等符号 语法分析将输出的 Token 按照语法组合语义...
架构设计
模块粒度的划分 单一功能原则:对象功能要单一,不要在一个对象里添加很多功能。 开闭原则:扩展是开放的,修改是封闭的。 里氏替换原则:子类对象是可以替代基类对象的。 接口隔离原则:接口的用途要单一,不要在一个接口上根据不同入参实现多个功能。 依赖反转原则:方法应该依赖抽象,不要依赖实例。 iOS 组件应该是包含 UI 控件,相关多个功能的合集,是一种粒度适中的模块。 组件之间的逻辑关系组件解耦并不是说要求每个组件间没有耦合,组件间也需要有上下层依赖关系。组件之间的分层做多不超过三个: 底层可以是与业务无关的基础组件,比如网络和存储等。 中间层一般是通用的业务组件,比如账号,埋点,支付,...
Auto Layout相关
Auto Layout 的来历 在 1997 年,Auto Layout 用到的 Cassowary 算法被发明出来。 Cassowary 能够有效解析线性等式系统和线性不等式系统,用来表示用户界面中那些相等关系和不等关系。基于此 Cassowary 开发了一种规则系统,通过约束来描述视图间的关系。约束就是规则,这个规则能够表示出一个视图相对于另一个视图的位置。 在 2011 年, Apple 将 Cassowary 算法运用到来自家的布局引擎 Auto Layout 中。 由于 Cassowary 算法让视图位置可以按照一种简单的布局思路来写,这些简单的相对位置描述可以在运行时动...
App启动速度优化
App启动速度优化App 冷启动主要分为三个阶段 main() 函数执行前 main() 函数执行后 首屏渲染完成后 main() 函数执行前系统主要做以下几件事: 加载可执行文件(App 的.o 文件集合) 加载动态链接库,进行 rebase 指针调整和 bind 符号绑定 Objc 运行时的初始化处理,包括 Objc 相关累的注册,category 注册,selector 唯一性检查 初始化,包括了执行 +load() 方法,attribute((constructor)) 修饰的函数的调用,创建 C++ 静态局部变量 响应优化的方向有: 减少动态库加载,每个库本身都...
网络知识
OSI(开放式系统互联) 七层模型物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由 1、0 转化为电流强弱来进行传输,到达目的地后再转化为 1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet 的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。传输层:定义...
avatar
Wrappers
rich and money