戴铭的博客 - 星光社

HTML 转原生 HTN 项目开发记录
前言本文主要是记录 HTN 项目开发的过程。关于这个项目先前在 Swift 开发者大会上我曾经演示过,不过当时项目结构不完善,不易扩展,也没有按照标准来。所以这段时间,我研究了下 W3C 的标准和 WebKit 的一些实现,对于这段时间的研究也写了篇文章深入剖析 WebKit。重构了下这个项目,我可以先说下已经完成的部分,最后列下后面的规划。项目已经放到了 Github 上:https://github.com/ming1016/HTN 后面可以对着代码看。 项目使用介绍通过解析 html 生成 DOM 树,解析 CSS,生成渲染树,计算布局,最终生成原生 Textrue 代码。下面代码...
深入剖析 WebKit
HTML 标准HTML HTML DOM 树的插入状态规范 https://html.spec.whatwg.org/multipage/parsing.html#the-insertion-mode HTML Tokenize 规范 https://html.spec.whatwg.org/multipage/parsing.html#tokenization https://dev.w3.org/html5/spec-preview/tokenization.html HTMLElement 堆栈规范 https://html.spec.whatwg.org/multipage/pa...
深入剖析 iOS 性能优化
问题种类时间复杂度在集合里数据量小的情况下时间复杂度对于性能的影响看起来微乎其微。但如果某个开发的功能是一个公共功能,无法预料调用者传入数据的量时,这个复杂度的优化显得非常重要了。上图列出了各种情况的时间复杂度,比如高效的排序算法一般都是 O(n log n)。接下来看看下图:图中可以看出 O(n) 是个分水岭,大于它对于性能就具有很大的潜在影响,如果是个公共的接口一定要加上说明,自己调用也要做到心中有数。当然最好是通过算法优化或者使用合适的系统接口方法,权衡内存消耗争取通过空间来换取时间。 下面通过集合里是否有某个值来举个例子:12345678910111213141516171819...
GMTC 上分享滴滴出行 iOS 端瘦身实践的 Slides
在这次 GMTC 大会上分享了我们在包大小瘦身实践过程中使用的一些方法和遇到的一些问题,会前也有很多朋友咨询过这方面的问题,相信这些经验对大家会有一些帮助,完整的 Slides 我放到了这里 http://pan.baidu.com/s/1skPAIID 这次大会其他讲师的 pdf 在 GMTC 官网已经放出 http://gmtc.geekbang.org/ 下面我提出 Slides 的内容
atSwift大会上分享《学习iOS编译原理能做哪些有意思的事情》的 Slides
本次 swift 大会上我分享了一个 h5 转 swift 的 demo 还有 llvm backend 相关的知识和应用,分享完后微信,淘宝和 perfect 团队成员都私下表示了对这个主题的兴趣,看来大家对用技术提高效率的决心是一致的。下面是我的 slides ,下载地址是 https://pan.baidu.com/s/1kVPvPiB。其他嘉宾的 pdf 和 源码在 https://github.com/atConf/atswift-2017-resources
用 Swift 编写的工程代码静态分析命令行工具 smck
前言最近几周在用 swift 做一个命令行工具 smck 用来对现有 OC 工程的代码做些分析和处理。日后工程切换成 Swift 可以加上对 Swift 工程代码的支持。昨天看到喵神在微博上说他下周要直播 live coding 一个 swift 的命令行工具,传送门: 现场编程 - 用 Swift 创建命令行工具 fengniao-cli Part1 ,其实蛮期待。想想跟喵神挺有缘的,最近下了他开发的 iOS 应用 Mail Me,随时能够记录工作和准备讲座时一些灵感,smck 的一些实现还有模块的设计灵感也是通过这个应用随时记录了下来呢,所以也推荐大家使用,真心方便。还有先前 Seg...
深入剖析 iOS 编译 Clang / LLVM 直播的 Slides
这次直播主要是针对上篇文章:https://github.com/ming1016/study/wiki/深入剖析-iOS-编译-Clang—LLVM 做了些补充,一些不容易用文字表达的知识点做了些详细的说明,同时现场做了些代码和操作的演示。 直播地址:https://segmentfault.com/l/1500000008514518 PPT 下载地址:https://pan.baidu.com/s/1dFkoaIl 下面我贴出 PPT 内容
深入剖析 iOS 编译 Clang / LLVM
前言2000年,伊利诺伊大学厄巴纳-香槟分校(University of Illinois at Urbana-Champaign 简称UIUC)这所享有世界声望的一流公立研究型大学的 Chris Lattner(他的 twitter @clattner_llvm ) 开发了一个叫作 Low Level Virtual Machine 的编译器开发工具套件,后来涉及范围越来越大,可以用于常规编译器,JIT编译器,汇编器,调试器,静态分析工具等一系列跟编程语言相关的工作,于是就把简称 LLVM 这个简称作为了正式的名字。Chris Lattner 后来又开发了 Clang,使得 LLVM ...
iOS预加载Web页面方案
可以先下载Demo看看效果,Github地址:< GitHub - ming1016/STMURLCache: iOS预加载Web页面方案 >可以预加载多个网址,然后在离线状态去显示那几个网址,看看是不是都完全缓存下来了。 使用方法在需要开启预加载的地方创建123self.sCache = [STMURLCache create:^(STMURLCacheMk *mk) { mk.whiteListsHost(whiteLists).whiteUserAgent(@"starming");}]; 这里是所有可设置项目,默认设置可以查看 model 的...
使用Swift3开发了个macOS的程序可以检测出objc项目中无用方法,然后一键全部清理
当项目越来越大,引入第三方库越来越多,上架的APP体积也会越来越大,对于用户来说体验必定是不好的。在清理资源,编译选项优化,清理无用类等完成后,能够做而且效果会比较明显的就只有清理无用函数了。现有一种方案是根据Linkmap文件取到objc的所有类方法和实例方法。再用工具逆向可执行文件里引用到的方法名,求个差集列出无用方法。这个方案有些比较麻烦的地方,因为检索出的无用方法没法确定能够直接删除,还需要挨个检索人工判断是否可以删除,这样每次要清理时都需要这样人工排查一遍是非常耗时耗力的。 这样就只有模拟编译过程对代码进行深入分析才能够找出确定能够删除的方法。具体效果可以先试试看,程序代码在:...