lufei's Studio.

lufei's Studio.

纸上得来终觉浅,绝知此事要躬行。

Swift 哈希表
哈希哈希函数,又被称为「散列算法」,是一种从任何一种数据中创建小的数字“指纹”的方法。 「哈希函数」把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做哈希值( hash values,hash codes,hash sums,或 hashes)的“指纹”。 哈希碰撞「哈希函数」是单向的,如果两个哈希值是不相同的,那么这两个哈希值的原始输入也是不相同的,但另一方面,哈希函数的输入和输出不是唯一对应关系的,如果两个哈希值相同,两个输入值很可能是相同的,但也可能不同。 这种「不同输入值通过哈希函数却得到相同输出」的情况称为「哈希碰撞」。 哈希洪...
iOS 关于离屏渲染
先从 UIView 和 CALayer 说起,因为这是我关注到「离屏渲染」的原因。 UIView 和 CALayerUIView 可以理解为「显示在屏幕上的一块矩形区域」,它可以管理这块区域内的内容,可以响应事件,可以使用 Auto Layout 布局。 UIView 的官方文档也指出了, UIView 必须在主线程工作 CALayer 理解为「图层」,没有响应事件的能力,也不能使用 Auto Layout 布局 CALayer 的内容渲染工作可以放在一个独立线程中 在每一个 UIView 实例 view 中,都默认有一个 CALayer 实例 layer,并且 view 会自动...
iOS13移除UIWebView之后
前言最近提交应用到 App Store 收到了苹果的提醒,大概是关于 iOS13 废弃的apiUIWebView的,官方的通知 好吧,那就开始检查项目中可能使用 UIWebView 的地方吧,首先本项目本身的代码,其实没有的,因为项目做的晚,都是直接用的 WKWebView ,不过依赖的很多第三方,为了兼容,都还有对 UIWebView 的引用。 检查第三方库SDK是否含有 UIWebView 的命令如下: 1find . -type f | grep -e ".a" -e ".framework" | xargs grep -s UIWebVie...
在iOS设备上运行本地web服务器
前言有这个奇怪想法的起因是因为,突然有个「H5离线展示」的需求,最简单的方法就是将前端代码下发到本地,直接加载,不过还有个办法就是通过起本地服务的方式,这样的方式,似乎更加优雅。 有了这个想法之后,我就开始寻找比较好的 socket 框架,想试一试,不过令我比较失望的是,大多数都是 OC 的,或者不支持最新的 swift 版本,理想情况下,我想找个纯 swift 的 socket 框架,这可难住我了,最终只能求助于苹果开源的一个偏底层的网络框架SwiftNio 开始SwiftNio虽说跨平台,但是移植到 iOS 上还需要一些特殊的扩展NIOTransportServices 依赖管理利用...
【译】Xcode Build Configuration Files
原文Xcode Build Configuration Files 正文软件开发最佳实践严格规定配置应与代码分隔开。但是,Apple平台上的开发人员经常难以将这些准则与Xcode的项目繁重的工作流程相提并论。 了解每个项目设置的功能以及它们之间如何交互是一项需要花费数年时间才能磨练的技能。但是事实上,关于这些的信息都隐藏在Xcode的图形交互中,这对我们了解这些没有帮助。 点击项目编辑页面的“Build Settings”标签,你会很吃惊的看到几百个关于projects, targets, 和configurations的构建设置分布在各个层级里,这还不包括其他六个选项卡。 幸运的是...
【译】Static and Dynamic Callable Types in Swift
原文Static and Dynamic Callable Types in Swift 正文上周,苹果发布了Xcode 11.4的第一个测试版本,这次更新也被证明为是近期更新中最重要的一次。XCTest(Xcode提供的用于测试的框架)得到了巨大的推动,比如大量便于日常测试的改善,还有模拟器,也得到了一些体贴的优化。但是Swift的变化引发了极大的关注。 在Xcode11.4中,swift的编译时间全面缩短(从许多开发者的回复来估计,大概在他们的项目中改善了10%到20%)。并且由于新的语言检查平台的引入,编译器总能返回有用的错误信息。这也是第一个附带着新的sourcekit-lsp服...
2019学习小总结
年会开完,基本就说明了,我的2019的工作时光结束了。 今年的学习收获,还是挺多的, 第一次开始把Swift用到了生产环境,不再只是写个小Demo这种小打小闹。RxSwift的使用更是让我觉得自己深深爱上了使用swift,当然这其中包含了一些曾经“时髦”的词汇,不过,我觉得吧,这些都不重要,重要的是RXSwift的使用,也确实提升了开发效率,配合一系列的优质swift框架,开发一个简单的 iOS App 其实越来越不是问题了。尤其是今年,苹果推出的Combine框架,让我对函数响应式编程充满了信心,并且不得不说Rxswift的源码质量非常高,通过阅读源码,也是能获得很多swift的知识的...
【译】Objective-C Direct Methods
原文Objective-C Direct Methods 正文当听说OC引入新功能的时候,我已经很难感到兴奋了。最近的一些关于OC的改进,都是为了服务于和Swift的互通,而不是关于OC这门语言本身了(看看nullabiltiy和lightwight generics) 因此,当我了解到最近的Clang的合并补丁为OC的方法添加了直接分配的机制的时候,感到十分的兴奋。 这种新功能的起源还不是很清楚;能得到的线索止于苹果内部的 Radar 号(2684889),除了能借此推出这项功能的相对年龄(估计是本世纪初的什么时候),就得不到更多的信息了。幸好,这个功能拥有充足的文档和测试范围,能让我...
Kingfisher源码阅读:命名空间
前言拜读喵神的Kingfisher,学习Swift,第一个就是这个kf命名空间的实现,好酷。 以前写OC的时候,给系统方法扩展,官方都是推荐使用增加前缀_的方式,swift的推出,改变了这种情况,因为语言特性和苹果力荐的面向协议编程,有了更酷的实现。 喵神的实现 swift中的lazySequence 思路实现一个包裹泛型Base类的Struct或者Class,实现Protocol 和你想要的命名空间,将 Protocol 加载到所需的 Base 类并通过Extension + where Base实现 Base 类的特定代码 实现参考上面的源码和思路,我自己试着写了一遍,代码如...
语义分析
前言学习了*词法分析(Lexical Analysis)和语法分析(Syntactic Analysis, or Parsing)*,基本上就可以用自己熟悉的语言来实现一门简单的脚本语言了,可以为自己的语言实现想要的操作符和关键字,简单的运算,也可以处理语法错误,我给自己的语言取名叫njscript,并且实现REPL交互环境。 当然,这玩意还是连玩具都算不上,因为我的算法能力太差,脑袋太笨,所以在njscript涉及到算法的时候,就打了退堂鼓,所以就跳过开始学习语义分析(Semantic Analysis) 开始简单来说,语义分析就是要让计算机理解我们的真实意图,把一些模棱两可的地方消除...
avatar
路小飞
海内存知己,天涯若比邻!