Hello, Harmony

本文旨在帮助 iOS 开发者快速入门鸿蒙开发的基本概念,了解鸿蒙与 iOS 系统下名词的对应关系,以便顺利转方向。 系统层面 鸿蒙 相当于 iOS 备注 Ability   UIKit - UISceneSession 或者 SwiftUI - Scene 多个 Ability 在系统中表现为多个应用实例,可以在任务管理器中切换、关闭, »

Swift编译器之迷惑行为一

OptionSet 是 Swift 中比较常用的一个内置协议,它的存在算是填补了既要强类型,又要支持按位取与的空白,是对 OC 中 NS_OPTIONS 的桥接。从声明上可以看到,OptionSet 协议本身又服从 SetAlgebra 协议,后者只定义了常见的集合操作方法,如 union remove insert 等,而前者在 extension 中给了默认实现: »

UIVisualEffectView 背后的实现

iOS 8 苹果为我们带来了原生的毛玻璃效果的支持,即 UIVisualEffectView。 UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]]; 但它提供的 API 非常有限,能改的样式属性只有两个 effect 以及不多的几个 style,模糊效果也基本是非黑即白,模糊程度也不可调节。但有时候不关心实现的设计师们会要求某些地方模糊小一点之类的,此时一般就换自己用高斯模糊来做了,这里问题就来了,真的做不了吗? »

CALayer 的 filters

CALayer 上有一个属性,一直以来大家都容易忽视,即:filters。而苹果官方文档上只给了 CIFilter 的示例,但事实上 CIFilter 设置进去后并没有效果,同时下方也指明了在 iOS 上不支持。(这里是 CIFilter 的完整列表) @interface CALayer : NSObject <NSSecureCoding, CAMediaTiming> /* An array »

UIView 显示调试边界

作为 iOS 开发者,我一直羡慕 Android 强大的开发者选项,如显示视图边界等。 而这一简单的功能,直到最近几个版本的 Xcode 才支持。真机调试运行起来后,点击 Debug -> View Debugging -> Show View Frames 效果如下图: 然而,只能在真机连接到 Xcode 时才能开启, »

所见即得的正则表达式

一般开发中,时不时需要用到正则表达式。然而不像 JavaScript 等语言一样有方便的原生支持,在 Objective-C 等语言中需要用字符串来生成正则表达式对象,而做为字符串字面量,它免不了需要转义。 JavaScript 版本 var reg = /^1\d{10}$/; // 判断中国大陆手机号 Objective-C 版本 NSNSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:@"^1\\d{ »

iOS 设备跟踪 GPU 使用率

关于如何用代码跟踪 App 的 CPU 使用率,网上相关文章已经很多了,但是很难搜索到 GPU 使用率相关的东西。这个原因可能是多样的: App 开发者一般不太关心 GPU 使用的问题,游戏开发者更关心一些。而游戏开发的有很强大的 Unity 工具可以实时跟踪 最近的 Xcode 本身也提供了 GPU 跟踪的功能(仅当 App 中存在 »

Block 调用检查

前言 如何确保一个传递给别人的 Block 被调用过,是一个一直困扰我的问题,因为 Block 作为 iOS 的一种回调机制,它可以像函数一样马上被调用,也可以像对象一样被持有、被传递、被释放,并在将来的某个时候被调用。有些时候我们传出去的 Block 必须被调用一次,否则会处于一种不确定的状态而导致程序无法继续,或者出错。例如,之前一篇文章《一种 App 内路由系统的设计》中的路由注册方式, »