普通视图

发现新文章,点击刷新页面。
昨天 — 2025年7月14日微言 | wyanassert

Kuikly 开发遇到的坑

作者 wyanassert
2025年7月14日 14:25

Kuikly是基于Kotlin MultiPlatform(KMP)构建的跨端开发框架, 支持Android、iOS、HarmonyOS和H5/小程序等多个平台, 据 PCG 开发团队的报告, Kuikly 可以提升团队 85%的开发效率.
这里记录一些我自己使用 Kuikly 遇到的一些坑, 希望后面能少点踩坑吧.

  1. 热重载显示成功, 但是实际并没有成功
    • iOS 使用热重载开发, 会需要手机挂 http 代理到开发的电脑上, 如果忘记这一步(或者因为别的什么事情把代理关掉了), 手机上仍然会提示热重载成功, 但实际只是从内置 bundle 加载成功, 并不是从开发电脑加载成功, 遇到这种疑问记得确认下这个代理是不是挂上了
  2. iOS 源码引入 Kuikly, 使用 XCode 调试 Kuikly 代码 (除了热重载的另一种开发模式)但是报错 B(l) ARM64 branch out of range (134218124 max is +/-128MB): from
    • Kuikly 工程太大, 导致程序的代码段过大, 导致的链接错误, 可能需要修改 Kuikly 代码
  3. 某些 case, 图片 ImageView 匹配上了错误的 url, 导致图片显示出错
    • Kuikly 为了性能 对图片做了复用, 我们又接管了 Kuikly 图片的下载, 所以在下载完成后需要校验url是不是还能匹配上这个 KRImageView:
    • NSString *curUrl = SAFE_CAST([imageView valueForKey:@"css_src"], NSString) ; 然后再跟当前的url比较下
  4. iOS 产物打包失败, 但是安卓成功, 需要修改 gradle 的编译内存大小设置, 可能是内存不够
  5. 热重载模式下, 单例不能用私有变量(属性)记录值, 比如记录生命周期点击次数,
    • 因为单例会在热重载模式下重新生成一个实例,
    • 考虑到线上热修复实际也是使用的热重载模式, 建议还是不要使用单例的私有变量记录
  6. 本地缓存双端实现不一致, iOS 缓存默认做了一个与用户 id 绑定的逻辑, 安卓没做
  7. 控制台重复输出, 点击一下, Mac 上的”控制台”app 输出了 5 条一样的日志, 误以为是代码执行了 5 次, 但是 Xcode 显示日志又只有一次, 重启”控制台” app 恢复正常
  8. iOS 热重载偶现报错,
    • ./kuiklyw run 执行后, 还要在按一下i, 切换到 iOS 的热重载, 默认是安卓
  9. toInt() / toLong() 崩溃
    • kotlin 中 toInt() / toLong(), kotlin 非数字字符串 不能转成数字会抛异常. 应该使用 toLongOrNull, 转不了会返回 null
  10. Switch 组件(系统默认的开关), 连续设置值后, 在 iOS 表现正常, 但是在安卓丢失了背景色导致整个组件都不可见
    • 最后一次修改 改为延迟修改
昨天以前微言 | wyanassert

SDWebImage 弱引用缓存

作者 wyanassert
2025年7月7日 19:26

SDWebImage 是iOS 开发最流行的异步图片加载框架, 其中的缓存模块 SDImageCache 有一个很精巧的设计弱引用缓存, 源码参考

1
@property (nonatomic, strong, nonnull) NSMapTable<KeyType, ObjectType> *weakCache; // strong-weak cache

在我们的项目中引入了这个小修改, 整体的缓存命中率有1%左右的提升,

是否开启 内存缓存命中率 磁盘缓存命中率 下载命中率
开启弱引用缓存 67.99% 21.36% 10.67%
不开启弱引用缓存 66.76% 21.99% 11.25%

什么是弱引用缓存

  • 强引用表(NSDictionary), 对图片保持强引用, 保证缓存一定存在
  • 强引用表(NSCache), 对图片保持强引用, 且会随着系统内存大小/切换前后台自动清理缓存
  • 弱引用表(NSMapTable), 对图片保持弱引用, 只要图片还在内存中(被 UI 强引用 或被其他组件强引用), 就能命中缓存, 不消耗额外内存

引入了弱引用缓存的图片加载流程

iOS图片编辑项目推荐

作者 wyanassert
2025年7月4日 19:18

在 GitHub 上确实有不少优秀且实用的 iOS 图片编辑相关的开源项目和 Demo。这些项目覆盖了基础编辑(裁剪、旋转、调整)、滤镜应用、涂鸦、贴纸添加、高级特效等功能。以下是一些值得关注的项目,适合学习和集成:


🛠 一、功能较全的图片编辑框架

  1. TOCropViewController

  2. YPImagePicker


🎨 二、滤镜 & 特效处理

  1. MetalPetal
    • 简介:基于 Metal 的高性能图像处理框架,支持滤镜链、实时渲染。
    • 链接https://github.com/MetalPetal/MetalPetal
    • 特点:替代 GPUImage,性能优异,适合复杂滤镜开发。

✏️ 三、涂鸦 & 标注工具

  1. SignatureView

  2. PencilKitExample


🧩 四、完整图片编辑 App Demo

  1. PhotoEditDebug


✅ 选择建议:

  • 需要快速集成裁剪功能TOCropViewController
  • 开发完整图片编辑 App → 参考 PhotoEditDebug
  • 实现高性能滤镜MetalPetal
  • 添加手绘涂鸦PencilKitSignatureView

💡 学习资源:

这些项目大多持续维护,代码质量较高。建议根据需求先尝试 Demo,再选择性集成模块到项目中!如果遇到具体实现问题,可以深入查看其 Issues 或源码实现逻辑。

❌
❌