星的天空的博客

种一颗树,最好的时间是十年前,其次是现在。

0%

AlfredWorkFlow可以高度自定义,可以通过它的一些功能配合编写的脚本,来优化日常的工作流程。之前注册了VPS玩,用来做代理和整一些服务端的小服务,发现每次登录都比较繁琐,就想到用AlfredWorkFlow来简化。
刚好最近的ChatGPT比较火,就用ChatGPT试了下,发现还是挺有帮助的。

阅读全文 »

为什么选择WeatherKit

最近个人在开发一个Flutter项目,是钓鱼相关的,提供水文查询,钓点记录,钓鱼记录等功能。其中钓鱼记录需要关联到天气相关的内容,主要是要用到历史天气数据。网上提供天气API的服务商很多,我查了一些资料,最终发现visualcrossing这家的接口设计和数据比较符合我的要求,但是这些天气API的免费额度都很低,如果只是个人玩玩是够用,发布出去商用肯定是需要充值的。后面查资料发现Apple在WWDC22新推出了WeatherKit,除了系统原生库WeatherKit
外(仅支持Apple平台,iOS 16.0+,iPadOS 16.0+,macOS 13.0+,Mac Catalyst 16.0+,tvOS 16.0+,watchOS 9.0+),还提供了Weather Kit REST API,而这个是全平台支持的,同时Apple开发者会员资格提供50万次调用/月的额度,并且支持历史天气数据的查询,刚好满足我Flutter项目的要求。

阅读全文 »

公司的iOS项目是原生嵌Flutter类型,使用Flutter多引擎(Engine group)方案。与以前项目使用的Flutter boost方案不同, 发现多引擎方案的attach功能非常不稳定,经常出现无法attach以及Hot reload, Hot restart卡死的情况,非常影响开发效率。本文会简单分析问题原因及提供一些解决方案。

阅读全文 »

Dart中类的类型

Dart是支持基于mixin继承机制的面向对象语言,所有对象都是一个类的实例,而除了 Null以外的所有的类都继承自Object类。 基于mixin的继承意味着尽管每个类(top class Object? 除外)都只有一个超类,一个类的代码可以在其它多个类继承中重复使用。

阅读全文 »

碰到的问题

最近在适配UI的时候,发现在iOS13及以后的版本进入一个视频播放页面后,调用更改状态栏的API无效了。后面发现是由于iOS13以后对Scene的适配以及一个隐藏的UIWindow导致的,iOS13加入Scene后,系统状态栏的实现发现了很大的变化。这里对iOS状态栏进行一个系统的总结备后续参考。

阅读全文 »

前言

在客户端开发中,图片的下载会占用大量的带宽,图片的加载会消耗大量的性能和内存,正确的使用图片显得尤为重要。本文会对图片显示原理进行介绍,然后提供一些优化思路及第三方图片框架的部分分析。

阅读全文 »

前言

cocoapodsPod引用资源的方式有多种,不同的方式对资源的使用还是有区别的,但也有一定的规律,这里我用一个样例工程来进行说明,样例工程名叫:AssetsDemo,使用pod lib create AssetsDemo命令创建,目录结构如图:

阅读全文 »

为什么要组件化

组件化一般是把工程分层拆成不同的组件,以达到解耦,模块复用,便于单元测试,编译速度优化等效果,最终目的是为了提高开发质量和效率。当然,组件化是有一定成本的,在组件化之前要考虑清楚当前的项目情况是否适合组件化,收益能否覆盖开发成本。规模较小,模块没太多复用需求的项目,就没必要进行组件化。

阅读全文 »

往年断断续续的有做过年终总结和年终计划,大多是象征性的做一做,好像是一个仪式。随着年龄的增大,责任越来越多,压力也越来越大。这让我开始思考:时间一天天的流逝,最终留下了什么?
很多人被工作与生活裹携着前进,一直在低头赶路,却忘记了抬头看看方向和欣赏一下周围的风景,等到某一天才发现,身边已满是荆棘,寸步难行。而这个年终总结,就是我”抬头看路”的一部分。我会从个人成长,家庭,工作,业余生活来进行总结。

阅读全文 »

修改老代码后,发现UITableView会在创建cell时闪退,原因是在调用dequeueReusableCell(withIdentifier:)创建cell时返回了nil。但是检查代码,确认在viewDidLoad注册了这个cell,按道理不应该返回nil。后面分析才发现,由于lazy var不是线程安全的,在碰到viewDidLoad的某个特殊调用时机时就会出现这个问题,而且代码可能在大部分场景正常运行,然后出现一些看起来莫名其妙的bug!

阅读全文 »