Home

Ruby Cheat Sheet 1 -- 初体验

Ruby 语言有很多特点和标签:面向对象、脚本语言、跨平台、开源,最吸引我的是 Ruby 认为其自身是一种旨在使大家编程时能乐在其中的编程语言,正是所谓的「快乐编程」。因为兴趣原因接触了一下 Ruby 这门语言,但由于目前我来说并不会经常使用 Ruby,所以在这边做一个 Cheat Sheet 的存档,方便之后随时查阅。

以下内容应多源于《Ruby 基础教程》一书,算是该书的读书笔记。书是二手买来的,但是新的很,发现果然还是纸质书有质感一些吧🤔。

Read more

非透明类型

具有非透明返回类型的方法或者函数可以隐藏它返回值的类型信息,相较于提供一个确切的类型作为函数,它是提供一个所支持的协议来描述其返回类型。隐藏类型信息这个操作在模块和调用模块的代码之间的边界处很有用,因为返回值的基础类型可以保持私有。与返回一个协议类型不同的是,非透明类型可以保留类型标识–这样编译器可以访问类型信息,但模块的调用者不能访问。

Read more

MacBook 升级 SSD 硬盘指北

我的手上自己的 MacBook Air 2015 13‘’ 是大概 16 年的时候买的,当时不懂具体需求,也没多少钱,买的是 8G + 128G 的配置,装了 Xcode 之后才知道社会的险恶🥶。前段时间 Xcode 12 需要更新,我把我电脑里能移的、能删的、能存iCloud的全处理了,才空出 30G 的空间更新 Xcode(虽然它在 App Store 上显示只要 4G)。然后再仔细一看电脑,我自己的文档 + 常用应用程序大概加起来 15G 不到,Xcode + 系统文件 + 微信 + 系统的”其他”文件大概是 70G,之后又赶上 Big Sur 更新,Big Sur 安装包就 12G,然后他还要 20G 的空间来更新……这时我意识到我只要装了 Xcode 就不要再想更新系统了。于是我硬着头皮在网上搜索了很多,发现是可以给 MacBook 升级 SSD 硬盘的!在此以我这次升级记录给大家做个参考。

UpdateSSD

Read more

响应链及手势识别

在上一篇「事件传递及响应链」中介绍了当屏幕上发生一次触摸之后,系统会如何寻找「第一响应者」,在寻找到「第一响应者」之后,如何确定「响应链」以及如何沿「响应链」传递事件。在上一篇文章的环境中,是不使用 UIGestureRecognizer 的。但是在我们平时的开发中想要给一个 UIView 加上处理事件的能力的话,使用 UIGestureRecognizer 及其子类比继承一个 UIView 的类、重写 touches 方法要方便的很多。这两种方法对事件的处理机制相互影响又有所不同。这也是本文的讨论内容:通过响应链及手势识别处理事件。

Responder Chain Z

Read more

事件传递及响应链

试想一下假如你是一台手机📟,当有人触摸了屏幕之后,你需要找到他具体触摸了什么东西,他可能触摸是一个按钮,或一个列表,也有可能是一个一不小心的误触,你会设计一个怎么样的机制和系统来处理呢?假如有两个按钮重叠了,或者遇到在滚动列表上需要拖动某个按钮的情况,你设计的机制能正常的运作嘛?在 iOS 中系统通过 UIKit 已经为我们设计好了一套方案,也是本文浅谈的内容: iOS 中的事件传递及响应链机制。

Responder Chain

Read more

内存安全

一般来说,Swift 会阻止代码中的不安全行为。例如,Swift 会保证变量在被使用前已经初始化,在释放某变量后其内存也会变得不可访问,以及检查数组索引是否存在越界错误。

Swift 还通过要求修改内存中位置的代码具有对该内存的独占访问权,来确保对同一内存区域的多重访问不会产生冲突。由于 Swift 会自动管理内存,因此大多数时候你根本不需要考虑内存访问的问题。然而,了解什么地方会有潜在的内存冲突发生也是很重要的,这样你就可以避免写出对内存访问有冲突的代码。如果你的代码中确实包含冲突,则会出现编译时错误或运行时错误。

Read more

关于 Storyboard 的一些小技巧

用了 Storyboard 很久了,在这记录一些使用 Storyboard 时的一些小技巧和小问题。主要内容有:Unwind Segue、@IBInspectable、Storyboard Reference 以及 Container View。

Read more