Latest

SwiftUI|监测视图更新及更新原因

SwiftUI|监测视图更新及更新原因

SwiftUI 的优势之一就是可以自动让 UI 和数据状态保持同步。频繁的视图更新也会带来一定的性能问题,尽管 Apple 已经让 SwiftUI 在更新时尽量只渲染视图树中必须重绘的部分,但我们还是需要知道某种可以监测视图更新以及触发其更新的原因的手段。这样我们才能在业务层面做一些针对性的性能优化。 我们可以通过在 View 的 body 视图构造器中插入一条 print 语句来监测到哪些视图的 body 正在被执行。这条语句还必须是一个赋值语句,不能是仅一个 print。因为 print 返回的是一个 Void ,而不是一个 View ,视图构造器会报错。 struct ContentView: View { var body: some View { let _ = print("ContentView Changed!") VStack { Image(systemName: "globe"

By Gray
天津一日行

天津一日行

五月份周末抽了一天去了天津转转。说来惭愧,在北京待了那么多年,我竟然一次都没有去过天津。 我们买的高铁票是北京南到天津站,游玩也是选的天津站附近的景点。当天天气不咋滴,上午阴天,下午就下起了雨。 出地铁后,映入眼帘的就是海河以及解放桥。 经过解放桥之后,再往前走一段路,就能看到路边有一个卖煎饼果子的小摊。我们当时刚下高铁,肚子正饿,所幸就买了一个吃。额外加了鸡蛋和辣条。都说天津的煎饼果子是一绝,这吃起来确实挺香👍。 穿过金街,一座看着很有时代感的建筑就映入眼帘——天津劝业场。刚看到它的名字时,我还以为是我念错了,怎么会有这么古怪的名字。后来一查还真是叫这个名字。 “劝业”二字也寄托着国人实业图强的希望。所以在天津劝业场开业之初,其经营宗旨以“劝业商场”四字的字头写出四句警言。即:劝吾胞兴,业精于勤,商务发达,场益增新。– 看天津系列:传统核心商圈金街 可能是因为当天是周六且非节假日,这条步行街上的行人并不多。游客们忙着拍照,本地人闲逛,和北京商业街的繁忙是不可同日而语的。天津是出了名的慢节奏,我倒是很喜欢这样的氛围。 做天津攻略时,我就看到有文章说天津美食有三绝:狗不理

By Gray
iOS 18 初体验

iOS 18 初体验

错过了凌晨的的 WWDC24 发布会,今早从各大媒体中获悉了此次版本更新的主要内容。与之前爆料的内容相近,此次更新主要是针对 AI 、桌面和隐私等。 到公司后发现 iOS 18 的开发者预览版已经可以安装了。于是到工位立马插电开始下载更新系统。这也是我第一次在自己日常使用的设备上安装 beta 版系统,之前都是在测试机上尝鲜。 下面是系统更新之后的一些体验。 控制中心更灵活了 * 控制中心左上角增加了一个加号➕按钮,点击后可以添加更多控制中心选项(长按空白区域也能触发)。这个功能是把「设置」中的控制中心设置挪到了控制中心面板上。 * 右上角增加了一个电源按钮,点击后可以选择是否要滑动关机,取消后立即进入锁定状态,必须使用密码才能解锁。 * 控制中心支持翻页了。可以上下滑动切换页面,目前我的设备上分页分别为「常用」「音乐」「网络连接」。如果开启了「家庭」的话,还会多一个家庭的分页。实测这个分页会影响控制中心的关闭手势—想要上滑关闭控制中心时,系统却将其识别成了上滑翻页。子页面可以通过长按移出和添加。 * 控制中心选项按钮支持调节大小了,并且支持了更多类型的选项(甚至可以

By Gray
绘画临摹·其一

绘画临摹·其一

新 iPad Pro 到手后,我第一时间把几年前买的 procreate 重新下载安装到了新设备上。我自知我没有多少艺术细胞,但还是按耐不住内心创作的渴望。尤其是前段时间看了《月亮和六便士》之后,这种渴望就愈来愈强了。 生命在于创作。绘画是一种创作的形式,也是表达和记录生活的一种方式。我在小红书上收藏了一些绘画的笔记,照着临摹了一些。 第一张我给它起名叫《日》。图层比较简单,依靠一些色彩和高斯模糊特效就可以完成。整体效果还是不错的~ 第二幅是雨天景色,主题色是绿。原作者画的很棒,但是我临摹的不太行,好多细节没有处理好,比如山峦的边缘没有涂抹好,山峦缺乏层次感,山峦和水面(是的,底下是水…)的交界处也没有清晰的表示出来,水面颜色不够通透。原作里面有几头牛,我实在画不出来,索性放弃了。 原作链接: 小红书 端午粽子简笔画。这个还是比较简单的。 原帖: 小红书 蓝天白云。 原帖: 小红书iPad画画79|月色初现(保姆级教程) -

By Gray
不要让你的收藏夹和标签页吃灰

胡思乱想

不要让你的收藏夹和标签页吃灰

最近我发现我的谷歌浏览器堆积了好多待处理的标签页。这些标签页大部分都是我在学习某项技术或者观看某项内容时,临时被别的事插了一脚,或者注意力被别的事情吸引了,就把当时在看的标签页放到了一边。久而久之,就积攒了非常多的吃灰标签页。而且我又不甘心把它们加到书签里然后关闭,我担心关闭之后就再也想不起来打开了。再加上平时工作忙,下班之后又总想休闲一下,所以这些标签页就一直得不到处理,越攒越多

By Gray

2023 年度总结

日子真快,2023 年结束了,新的一年又开始了。本来不是很想写总结的,仔细想了想,就权当是写一个年度的日记吧,将来回忆过往的时候也许能用到。 事记 记事簿 动词 名词 注释 买了 Switch 赶在王国之泪发售前买了,买后通关了旷野之息和王国之泪。 买之前听说里面能玩小时候的 FC 小游戏, 还能玩塞尔达东方的传说、缩小帽、时之笛系列,以及火焰纹章系列,就一直想买了 考了 驾照 后悔大学的时候没有早点考,今年趁着年中的时候不怎么忙,报了个周末班考下了。 周六周日两天都去驾校确实挺累的,还遇到过大雨天,好在科一到科四都一把过,顺顺利利拿下了 换了 设备 去年买的 HHKB 雪,在前公司被修玻璃的工人整坏了,就在日本官方店重新买了把,还给它配了个保护套,通过转运公司运回国。不得不说,在官网买便宜好多啊 手机例行隔年一换,iPhone 13 Pro 升级到了

By Gray

GitLab 集成 Telegram

GitLab 官方支持集成 Telegram,在项目的 Settings → Integrations 里就能找到。除了 Telegram 外,GitLab 还支持对 Slack、Discord 等软件的集成。 之前我做过通过 GitLab 的 webhook,在飞书群里发送 GitLab 通知的项目。那个项目需要先让 GitLab 把 webhook 数据发到自己服务器上,然后再格式化为飞书机器人支持的消息卡片数据,最后通过飞书机器人的 webhook 把消息发到指定的群里。 不过 GitLab 对 Telegram 的集成不需要咱们先把数据发到自己服务器上,它是可以直接发送对应软件支持的消息数据的。咱们只需要提供一下相关的配置信息即可。 根据我的尝试,目前可以在 GitLab 中配置发送通知的对象为 Telegram 的 Group、Channel 或者单个用户(比如自己)。 Telegram 的

By Gray

iOS 调用栈回溯

前言 在做「大内存分配监控系统」时,我深入学习了一下堆栈回溯相关的底层原理,以及符号化相关的知识。这篇文章是当时记下的学习笔记。 调用栈回溯的目的是追踪某个函数的调用链。比如函数 A 调用了函数 B,函数 B 又调用了函数 C,调用链就是 A → B → C。调用栈回溯拿到的一般是函数的内存地址信息,无法看到函数名,需要再做一次符号化操作。 本文参考: App LibcArm DeveloperProcessor_registerDive into System CPU 寄存器 CPU 寄存器是 CPU 芯片上数据存储的小型区域,位于内存结构的顶部,具有最快的数据访问速度,用来暂时存放参与运算的数据和运算结果。 ARM64 指令集提供了下列用于调用栈的寄存器: x0~x30 通用寄存器负责的功能如下: * x0~x7: 参数寄存器,用于把参数传递给函数并返回结果。可以用作临时寄存器或调用者保存的寄存器变量,可以在调用其他函数之间的函数内保存中间值。

By Gray