- 博客(10)
- 收藏
- 关注
原创 ReactNative 入门体验
环境macOS Mojave Version 10.14.3Xcode 10.1iPhone 5s 10.0.1node v11.10.0npm 6.7.0React Native 0.58react 16.6.3新建ReactNative项目brew install nodebrew install watchman安装React Native命令行工具npm in...
2019-02-22 23:36:14 1571
原创 iOS崩溃日志分析
环境macOS Mojave 10.14.3Xcode10.1iPhone6S 10.0.1获得崩溃日志方式一:Xcode菜单 > Window > Devices and Simulators选择设备并查看设备日志(View Device Logs)方式二:手机设置 > 隐私 > 诊断与用量 > 诊断与用量数据崩溃日志的结构头部(Head...
2019-02-09 09:57:54 4790
原创 Charles HTTP抓包原理
前言: Web代理服务器来自参考链接2对客户端/浏览器来说Web代理服务器是服务器对服务器来说Web代理服务器是客户端环境WireSharkCharlesmacOS 10.13.6解释根据参考链接1中的这段话Web proxy serversWeb proxies forward HTTP requests. The request from the client ...
2019-01-09 17:06:08 1540
原创 Clang学习历程 编译过程-词法分析
前言《编译原理》中提到编译器的第一个步骤是词法分析(Lexical Analysis)或扫描。词法分析器读入组成源程序的字符流,并且将它们组织成为有意义的词素(lexeme)的序列。对于每个词素,词法分析产生如下形式的词法单元(token)作为输出:<token-name,attribute-value>token-name 是一个语法分析步骤要使用的抽象符号att...
2018-12-28 15:41:13 4023
原创 Clang学习历程 概述
介绍ClangClang是LLVM(Low Level Virtual Machine)项目提供的工具链中的编译器的前端部分LLVM项目是模块化和可重用的编译器和工具链技术的集合,LLVM的一大特色就是,有着独立的、完善的、严格约束的中间代码表示。这种中间代码,就是LLVM的字节码,是LLVM抽象的精髓,前端生成这种中间代码,后端自动进行各类优化分析,让用LLVM开发的编译器,都能用上最先见...
2018-12-28 15:39:46 6336
原创 ObjC Runtime 中 Weak 属性的实现 (中)
导语在上一篇中简单分析了 Weak 属性是如何被存储,获取和销毁的,其中的 SideTable 结构体当做黑盒进行处理。本文尝试对 SideTable 的结构进行一些分析。观察struct SideTable { spinlock_t slock; RefcountMap refcnts; weak_table_t weak_table; SideTable() {
2017-06-05 07:19:33 1203
原创 ObjC Runtime 中 Weak 属性的实现 (上)
前言OC 中的 weak 属性是怎么实现的,为什么在对象释放后会自动变成 nil?本文对这个问题进行了一点探讨。环境 mac OS Sierra 10.12.4 objc709参考答案搜索后发现runtime 如何实现 weak 属性给出了一个参考答案。 runtime 对注册的类, 会进行布局,对于 weak 对象会放入一个 hash 表中。 用 weak 指向的对象内存地址作为
2017-05-30 08:20:04 3926 1
原创 Masonary-简化自动布局
Masonary的价值在iOS中,AutoLayout是一种灵活且高效的布局视图的方法,它通过约束简单明确的实现了多屏适配的功能,但是如果不用storyboard而使用,纯代码开发时,使用NSContraints就显得有些繁琐了,而Masonary就是创建自动布局的轻量级框架。如何安装新建一个xcode工程在Podfile中 添加 pod ‘Masonry’ (提示:最好在vim下编辑,关闭中文
2015-06-11 00:18:26 1486
原创 OC的数据传递-Block,代理,通知,KVO
在开始之前,先贴一张图片,表明为什么需要将Block,代理,通知和KVO放在一起。由上图可知,Block,代理,通知和KVO都能实现数据传递的功能,可以根据不同的情景选择合适的方式Block声明// 使用typedef为block变量定义别名// 解释:将一个返回值为double,参数为int的block取一个Rename的别名typedef double (^Rename)(int);//
2015-06-09 07:58:41 1371 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人