自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

╰つ栺尖篴夢ゞ

少一点问别人为什么,多一点问自己凭什么!!*(^^)*

  • 博客(1070)
  • 资源 (66)
  • 问答 (3)
  • 收藏
  • 关注

原创 Swift之Codable自定义解析将任意数据类型解析为想要的类型

一、前言大多数现代应用程序的共同点是,它们需要对各种形式的数据进行编码或解码。无论是通过网络下载的 Json 数据,还是存储在本地的模型的某种形式的序列化表示形式,对于几乎任何 Swift 代码库而言,能够可靠地编码和解码不同的数据都是必不可少的。这就是为什么 Swift 的 Codable API 能成为 Swift 4.0 的新功能一部分时,具有如此重要的重要原因。从那时起,它已发展成为一种标准的,健壮的机制,可以在 Apple 的各种平台中使用编码和解码包括服务器端 Swift。Codable

2021-10-24 14:54:56 59587 95

原创 iOS之深入解析Cocoapods的工作原理与源码分析

一、Cocoapods 简介① Cocoapods 是什么?Cocoapods 是一个运行在 Ruby 环境下,负责管理 iOS 项目中第三方开源库的工具,它可以解决库与库之间的依赖关系,同时通过创建一个 Xcode 的 workspace 来将这些第三方库与工程连接起来,方便开发使用。Cocoapods 能让我们集中统一管理第三方开源库,为开发节省设置和更新第三方开源库的时间,使用 Cocoapods 的目的是让我们能自动的、集中的、直观的管理第三方库。使用 Cocoapods 管理第三方的开源

2021-09-05 02:52:08 16926 41

原创 iOS之性能优化·优化App界面的渲染与流畅度

一、界面渲染流程① 渲染流程分析计算机中的显示过程通常是通过 CPU、GPU、显示器协同工作来将图片显示到屏幕上,如下图所示:苹果为了解决图片撕裂的问题使用了 VSync + 双缓冲区的形式,就是显示器显示完成一帧的渲染的时候会向发送一个垂直信号 VSync,收到这个这个垂直信号之后显示器开始读取另外一个帧缓冲区中的数据而 App 接到垂直信号之后开始新一帧的渲染。CPU 计算好显示内容,提交至 GPU;GPU 经过渲染完成后将渲染的结果放入 FrameBuffer(帧缓存区)

2021-07-13 19:54:06 12949 30

原创 iOS之深入解析weak关键字的底层原理

一、weak 关键字在 iOS 开发过程中,会经常使用到一个修饰词 weak,使用场景大家都比较清晰,避免出现对象之间的强强引用而造成对象不能被正常释放最终导致内存泄露的问题。weak 关键字的作用是弱引用,所引用对象的计数器不会加1,并在引用对象被释放的时候自动被设置为 nil。...

2021-06-16 14:04:49 16595 5

原创 iOS之深入解析KVO的底层原理

一、KVO 简介① 概念KVO 全称 Key Value Observing,是苹果提供的一套事件通知机制,允许对象监听另一个对象特定属性的改变,并在改变时接收到事件。由于 KVO 的实现机制,所以对属性才会发生作用,一般继承自 NSObject 的对象都默认支持 KVO。KVO 和 NSNotificationCenter 都是 iOS 中观察者模式的一种实现,区别在于,相对于被观察者和观察者之间的关系,KVO 是一对一的,而 NSNotificationCenter 是一对多的,KVO 对被监

2021-06-06 19:52:54 18503 27

原创 iOS之深入解析KVC的底层原理和自定义KVC的实现

一、KVC 简介① 定义KVC 是 Key-Value Coding 的简称,中文译义为键值编码。KVC 是指 iOS 的开发中,可以允许开发者通过 Key 名直接访问对象的属性,或者给对象的属性赋值,而不需要调用明确的存取方法。KVC 是由 NSKeyValueCoding 非正式协议启用的一种机制,对象采用该协议来间接访问其属性,即可以通过一个字符串 key 来访问某个属性。这种间接访问机制补充了实例变量及其相关的访问器方法所提供的直接访问。通过 KVC 就可以在运行时动态地访问和修改对象的

2021-06-05 18:16:57 19996 13

原创 iOS之深入解析内存管理Tagged Pointer的底层原理

一、前言① Tagged Pointer 概念iOS 开发者对“引用计数”这个名词肯定不陌生,引用计数是苹果为了方便开发者管理内存而引入的一个概念。当引用计数为 0 时,对象就会被释放。但是,真的是所有对象都是这样吗?其实,内存管理方案除了常见的 MRC 和 ARC,还有以下三种:Tagged Pointer、Nonpointer_isa、SideTables。在 2013 年 9 月,苹果推出了 iPhone5s,与此同时,iPhone5s 配备了首个采用 64 位架构的 A7 双核处理器,为了

2021-05-27 20:55:15 18103 3

原创 iOS之深入解析Runloop的底层原理

一、Runloop 简介① 什么是 Runloop ?RunLoop 是事件接收和分发机制的一个实现,是线程相关的基础框架的一部分,一个 RunLoop 就是一个事件处理的循环,用来不停的调度工作以及处理输入事件。Runloop 不仅仅是一个运行循环(do-while 循环),也是提供了一个入口函数的对象,消息机制处理模式,运行循环从两种不同类型的源接收事件。输入源提供异步事件,通常是来自另一个线程或来自不同应用程序的消息。定时器源提供同步事件,发生在预定时间或重复间隔。两种类型的源都使用特定于

2021-05-20 21:12:42 18545 9

原创 iOS之深入解析自动释放池autoreleasepool的底层原理

一、自动释放池 autoreleasepool 机制自动释放池是 OC 中的一种内存自动回收机制,它可以将加入 AutoreleasePool 中的变量 release 的时机延迟。简单来说,就是当创建一个对象,在正常情况下,变量会在超出其作用域的时立即release。如果将对象加入到了自动释放池中,这个对象并不会立即释放,会等到 runloop 休眠,超出 autoreleasepool 作用域{}之后才会被释放。自动释放池 autoreleasepool 其机制如下图所示:autore

2021-05-20 18:52:12 18720 9

原创 iOS之深入解析“锁”的底层原理

一、OSSpinLock(自旋锁)自从 OSSpinLock 出现安全问题,在 iOS10 之后就被 Apple 废弃。自旋锁之所以不安全,是因为获取锁后,线程会一直处于忙等待,造成了任务的优先级反转;其中的忙等待机制可能会造成高优先级任务一直 running 等待,占用时间片,而低优先级的任务无法抢占时间片,会造成一直不能完成,锁未释放的情况;在 OSSpinLock 被弃用后,其替代方案是内部封装 os_unfair_lock,而 os_unfair_lock 在加锁时会处于休眠状态,而不是自旋

2021-05-12 01:38:43 18129 5

原创 iOS之深入解析保证线程安全的“锁”的使用和性能分析

一、线程安全在平时的开发中经常使用到多线程,在使用多线程的过程中,难免会遇到资源竞争的问题,那么怎么来避免出现这种问题呢?当一个线程访问数据的时候,其他的线程不能对其进行访问,直到该线程访问完毕。简单来讲就是在同一时刻,对同一个数据操作的线程只有一个。只有确保了这样,才能使数据不会被其他线程影响。而线程不安全,则是在同一时刻可以有多个线程对该数据进行访问,从而得不到预期的结果。比如写文件和读文件,当一个线程在写文件的时候,理论上来说,如果这个时候另一个线程来直接读取的话,那么得到的结果可能是无法预料

2021-04-11 01:03:04 8423 7

原创 iOS之深入解析GCD的底层原理

一、队列① 源码分析在源码中搜索 dispatch_queue_create 关键字,可以在 queue.c 中发现: dispatch_queue_t dispatch_queue_create(const char *label, dispatch_queue_attr_t attr) { return _dispatch_lane_create_with_target(label, attr, DISPATCH_TARGET_QUEUE_DEFAULT, true); }

2021-04-05 15:25:26 8196 14

原创 iOS之深入解析Block的底层原理

这里写目录标题一级目录二级目录三级目录一、block 本质① block 本质探究② block为什么需要调用?③ block是如何获取外界变量的?④ __block的原理二、block 底层源码分析① block 源码位置② block 类型分析③ 内存变化④ 调用三、签名四、block 三次 copy① _Block_copy 源码分析② _Block_object_assign 分析③ 调试验证④ 总结五、_Block_object_dispose 分析六、block 三层 copy 流程如下:一级

2021-03-17 20:58:54 35047 4

原创 iOS之深入解析Block的使用和外部变量捕获

一、前言闭包 = 一个函数「或指向函数的指针」+ 该函数执行的外部的上下文变量「也就是自由变量」; Block是Objective-C对于闭包的实现。其中,Block:可以嵌套定义,定义Block方法和定义函数方法相似;Block 可以定义在方法内部或外部;只有调用Block时候,才会执行其{}体内的代码;本质是对象,使代码高聚合。使用 clang 将 OC 代码转换为 C++ 文件查看block的方法:在命令行输入代码 clang -rewrite-objc 需要编译的OC文件

2021-03-16 04:04:08 32490 10

原创 iOS之LLVM编译流程和Clang插件开发集成

LLVM简介一、什么是LLVM?LLVM 是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。LLVM 最早的时候是 Illinois 的一个研究项目,主要负责人是Chris Lattner,他现在就职于Apple。Apple 目前也是 llvm 项目的主要赞助者之一。在理解 LLVM 时

2020-11-26 13:33:35 12488 10

原创 iOS之性能优化·优化App的启动速度

抛砖引玉苹果是一家特别注重用户体验的公司,过去几年一直在优化 App 的启动时间,特别是去年的 WWDC 2019 keynote [1] 上提到,在过去一年苹果开发团队对启动时间提升了 200%;虽然说是提升了 200%,但是有些问题还是没有说清楚,比如:为什么优化了这么多时间?作为开发者的我们,我们还可以做哪些针对启动速度的优化?所以我们今天结合 WWDC2019 - 423 - Optimizing App Launch [2] 聊一下和启动相关的东西。概念引入一、Mach-O

2020-11-11 04:16:35 33274 3

原创 iOS之深入解析dyld与ObjC关联的底层原理

App启动与dylb加载我们知道 dyld 的加载过程,即在 App 启动启动执行 main 函数之前,dylb 主要作了环境变量配置、共享缓存、主程序的初始化、插入动态库、链接主程序、链接动态库、弱符号绑定、执行初始化方法、寻找主程序入口等一系列处理,具体请参考我之前的博客:iOS之深入解析App启动dyld加载流程的底层原理;在 main 函数执行过程中,当 dyld 加载到开始链接主程序的时候 , 递归调用 recursiveInitialization 函数。recursiveInitial

2020-10-22 05:05:44 33951 2

原创 iOS之深入解析App启动dyld加载流程的底层原理

dyld 简介一、什么是dyld?dyld 是英文 the dynamic link editor 的简写,意为动态链接器,是苹果操作系统的一个重要的组成部分。在 iOS/Mac OSX 系统中,仅有很少量的进程只需要内核就能完成加载,基本上所有的进程都是动态链接的,所以 Mach-O 镜像文件中会有很多对外部的库和符号的引用,但是这些引用并不能直接用,在启动时还必须要通过这些引用进行内容的填补,这个填补工作就是由 动态链接器dyld 来完成的,也就是符号绑定。动态链接器 dyld 在系统中以一个

2020-10-13 04:44:31 31770 5

原创 iOS之深入解析objc_msgSend消息转发机制的底层原理

一、抛砖引玉objc_msgSend() 消息发送的过程就是 通过 SEL 查找 IMP 的过程 。objc_msgSend() 是用 汇编语言 实现的,使用汇编实现的优势是:消息发送的过程需要足够的快速,高级语言在执行的时候都是需要翻译成汇编语言,经过编译成被机器识别的 二进制文件 ,使用汇编可以省去这一翻译过程,可以更快速被机器识别;对于消息的发送,存在很多未知的参数,这有很多不确定性,使用 汇编的寄存器 要比 C 或者 C++ 表现好的多。objc_msgSend() 通过汇编

2020-10-13 03:06:59 33753 3

原创 iOS之深入解析Runtime的objc_msgSend“慢速查找”底层原理

CacheLookup 快速查找objc_msgSend 通过汇编快速查找方法缓存,如果能找到则调用 TailCallCachedImp 直接将方法缓存起来然后进行调用,如果查找不到就跳到 CheckMiss ,然后走慢速查找流程。该文主要分析 objc_msgSend 慢速查找流程。objc_msgSend 的快速查找请参考之前的文章:iOS之深入解析Runtime的objc_msgSend“快速查找”底层原理。__objc_msgSend_uncached 慢速查找CheckMiss 源码

2020-09-23 01:26:34 33277 3

原创 iOS之深入解析Runtime的objc_msgSend“快速查找”底层原理

Runtime一、什么是 runtime ?Objective-C 语言将尽可能多的决策从编译时和链接时推迟到运行时。只要有可能,它就动态地做事情,这意味着该语言不仅需要一个编译器,还需要一个运行时系统来执行编译后的代码。运行时系统作为 Objective-C 语言的一种操作系统,它使语言起作用。因为 Objc 是一门动态语言,所以它总是想办法把一些决定工作从编译连接推迟到运行时。也就是说只有编译器是不够的,还需要一个运行时系统 (runtime system) 来执行编译后的代码。这就是 Obje

2020-09-20 00:44:08 30954 3

原创 iOS之深入解析AFNetworking的底层原理

这里写目录标题AFNetworking简介一、AFNetworking 版本二、AFNetworking 构成模块解析一、AFURLSessionManager① 创建sessionManager②③整体流程① 创建 NSMutableRequest 对象② 用 NSMutableRequest 对象创建 NSURLSessionDataTask 对象AFNetworking简介一、AFNetworking 版本AFNetworking 是 iOS 最常用的网络框架,虽然系统也有 NSURLSessi

2020-09-04 23:40:37 9256 3

原创 iOS之深入解析对象isa的底层原理

一、isa 简介alloc初始化时不仅创建了对象并且分配内存,同时初始化 isa 指针属性。Objective-C 对象在底层本质上是结构体,所有的对象里面都会包含有一个 isa ,isa 的定义是一个联合体 isa_t,isa_t 包含了当前对象指向类的信息。isa 是一个联合体,而这其实是从内存管理层面来设计的,因为联合体是所有成员共享一个内存,联合体内存的大小取决于内部成员内存大小最大的那个元素,对于 isa 指针来说,就不用额外声明很多的属性,直接在内部的 ISA_BITFIELD 保存信息。

2020-09-02 12:34:19 17122 3

原创 iOS之深入解析YYImage图片处理的底层原理

YYImage的使用特性支持WebP、APNG、GIF类型动画图像的播放/编码/解码;支持WebP、PNG、GIF、JPEG、JP2、TIFF、BMP、ICO、ICNS类型静态图像的显示/编码/解码;支持PNG、GIF、JPEG、BMP类型图片的渐进式/逐行扫描/隔行扫描解码;支持多张图片构成的帧动画播放,支持单张图片的 sprite sheet 动画;高效的动态内存缓存管理,以保证高性能低内存的动画播放;完全兼容 UIImage 和 UIImageView,使用方便。基本用法显示动

2020-07-08 13:26:10 17326 3

原创 HarmonyOS Next面试题之Worker常驻线程如何通过TaskPool进行多任务并发处理

本文介绍了HarmonyOS Next中Worker与TaskPool结合的高性能后台任务处理方案。核心架构采用Worker作为常驻调度中心,通过主线程下发任务、Worker维护状态、TaskPool执行具体任务的模式,实现了职责分离与高效并发。文章详细展示了图片批量上传的实战案例,包括任务定义、Worker调度中心实现和主线程交互流程。该方案优势在于:Worker管理上下文保持状态,TaskPool提供无状态并发执行,二者结合既保证了任务调度的灵活性,又充分利用了系统资源。

2026-05-06 14:15:25 246

原创 HarmonyOS Next面试题之Worker的运行机制和消息通信

摘要:本文详细介绍了HarmonyOS Next中Worker线程的运行机制与使用方法。Worker作为轻量级独立线程,基于Actor并发模型运行,适用于计算密集型任务,避免主线程阻塞。文章从Worker创建、线程文件配置、主线程调用到核心API进行了全面说明,并重点阐述了多级Worker生命周期管理的原则,强调"从子到父"的销毁顺序和父Worker存活保障机制。通过代码示例展示了正确使用Worker的方式及常见错误规避方法,为开发者提供了Worker线程开发的完整指导。

2026-04-30 17:40:19 393

原创 HarmonyOS Next面试题之TaskPool的运作机制及@Concurrent装饰器的使用

HarmonyOS Next的TaskPool是一种高效的多线程管理机制,基于Worker线程封装实现自动化调度。其核心特性包括:1)自动管理线程生命周期,开发者只需关注业务逻辑;2)动态扩缩容机制,根据任务量自动调整工作线程数;3)支持任务优先级设置和取消功能;4)通过@Concurrent装饰器确保线程安全,对并发函数进行编译检查和运行时标记。TaskPool提供execute()方法提交任务,支持单任务和任务组执行,并能返回Promise形式的结果。该系统通过智能调度算法优化资源利用,提升应用性能,特

2026-04-30 14:58:11 449

原创 HarmonyOS Next面试题之异步并发Promise和async/await的核心机制

本文系统介绍了HarmonyOS Next中的异步并发编程机制。主要内容包括:1)异步编程的核心思想和实现手段,区分了异步I/O任务和多线程并发的适用场景;2)Promise对象的状态机特性及其静态方法all/allSettled/race/any的应用场景;3)async/await语法糖的本质优势,以及与传统Promise链式调用的对比;4)实际开发中的注意事项,如async回调问题、生命周期函数异常处理等;5)深入分析了async/await与多线程的本质区别,以及Promise构造函数内部的同步执行

2026-04-30 14:16:20 352

原创 iOS经典面试题之从原理到实战全方位对比堆和栈的区别

本文对比了iOS开发中栈与堆内存的核心区别。栈由编译器自动管理,存储局部变量和临时数据,地址连续且访问速度快;堆需手动或ARC管理,存储对象实例和动态内存,地址不连续且访问较慢。通过地址特征、连续性测试和性能基准测试,文章展示了栈在速度上的优势以及堆在灵活性上的特点。最后总结了二者在地址分布、访问速度、适用场景等方面的差异,并提供了使用建议:小数据用栈,大数据和共享对象用堆,避免栈溢出和内存泄漏风险。

2026-04-29 15:30:55 33

原创 HarmonyOS Next面试题之线程模型是如何确保UI操作在主线程中执行?

本文分析了HarmonyOS Next的UI线程安全机制及其实现方案。系统采用单线程UI模型,强制所有UI操作必须在主线程执行,通过事件循环(EventRunner)串行处理任务,避免多线程竞争导致界面错乱或崩溃。文章通过典型错误案例展示了子线程直接修改UI会触发系统保护机制而崩溃,并提供了三种推荐解决方案:TaskPool+Promise自动回调主线程、EventHandler显式线程切换以及emitter事件总线配合二次切换。其中TaskPool方案最为简洁安全,而EventHandler适合需要精细控

2026-04-22 10:25:51 472

原创 HarmonyOS Next面试题之主线程与子线程访问同一个单例,获取的对象是同一个吗?

摘要 HarmonyOS NEXT中单例模式的独特行为:基于Actor模型的线程隔离设计使得主线程和子线程获取的单例对象并非同一实例。传统共享内存模型中单例是全局唯一的,但在HarmonyOS NEXT的ArkTS语言中,每个线程拥有独立的引擎实例,内存完全隔离。通过实验验证,子线程修改单例值不会影响主线程中的实例。官方推荐使用"use shared"标记和@Sendable装饰器实现真正的跨线程共享单例,或通过SharedArrayBuffer、消息传递等方案实现数据共享。这种设计虽然

2026-04-21 16:32:34 455

原创 HarmonyOS Next面试题之装饰器@Prop与@Link的区别和使用

本文对比了ArkUI中@Prop和@Link两种装饰器的区别。@Prop实现单向数据流,子组件可修改但不会同步回父组件,适用于纯展示场景;@Link建立双向绑定,子组件修改会立即同步回父组件,适用于表单交互等场景。文章通过计数器示例演示了两种装饰器的具体使用方式,并指出在ArkUI V2版本中,@Link被@Param+@Event组合替代,以遵循单向数据流的最佳实践。

2026-04-10 10:43:25 442

原创 iOS经典面试题之深入解析一个触摸事件是如何识别并执行具体逻辑的

iOS触摸事件处理流程分为硬件层、系统层和应用层。硬件层通过IOKit将电容屏信号转换为IOHIDEvent,发送给SpringBoard。系统层由SpringBoard决定目标App并通过mach port转发事件。应用层中,UIApplication将事件转换为UIEvent并放入队列,由主线程RunLoop处理。事件通过Hit-Testing确定第一响应者,沿响应者链传递,手势识别器和UIControl可介入处理。多点触控、3D Touch等特殊场景也有相应机制。整个过程确保了触摸事件的高效处理和精准

2026-04-08 16:36:54 278 1

原创 Web之深入解析Cookie的安全防御与跨域实践

Cookie是网站存储在用户浏览器中的小型文本数据,用于识别用户身份和记录偏好。它通过键值对存储信息,并包含Domain、Path、Expires等属性控制作用范围和有效期。常见应用场景包括用户登录状态保持、购物车存储和A/B测试分组。Cookie可由服务端或客户端生成修改,但受HttpOnly和SameSite等安全属性限制。默认遵循同源策略,但在特定条件下可实现跨域共享。使用时需注意编码、路径匹配等细节,并防范CSRF/XSS攻击风险。

2026-04-08 15:29:19 692 2

原创 iOS经典面试题之对于多线程进行for循环自加会出现的结果分析

本文分析了多线程并发执行自增操作时的数据竞争问题。当t个线程各自循环m次对共享变量count执行自增操作时,最终结果范围是[m, t×m]。最小值m出现在最极端竞争情况下,所有线程每次自增都读取相同旧值;最大值t×m出现在完全串行化无冲突时。这是由于count++的非原子性导致,底层包含读取、修改、写回三个可能被交叉执行的指令。解决方案包括使用原子操作、锁机制、GCD串行队列或信号量等同步方法。文章通过具体示例和指令级分析,阐明了多线程环境下数据竞争的本质及应对策略。

2026-04-07 15:36:22 40

原创 iOS经典面试题之深入解析什么是原子操作

iOS开发中的原子操作提供轻量级线程同步,主要包括三种方式:1) Swift 6+的Atomic结构体,提供类型安全的现代方案;2) OSAtomic系列函数(已废弃),支持整型、布尔值的原子操作;3) OC的atomic属性修饰符,仅保证setter/getter原子性。OSAtomic包含递增/减、CAS、位运算等操作,但需注意地址对齐问题。虽然原子操作比锁性能更高,但复杂场景仍需其他同步机制。建议新项目优先使用Swift的Synchronization框架。

2026-04-02 17:21:58 117

原创 Swift经典面试题之深入解析强制解包:从感叹号运算符到可选类型安全处理的全面分析

Swift中的强制解包(!)是一种直接从可选类型中取出值的操作,若值为nil会导致程序崩溃。它适用于开发者能100%确定值非nil的情况,但存在严重风险。相比隐式解包可选类型(Type!),强制解包需要手动添加!运算符。安全替代方案包括可选绑定、空合并运算符等。实际开发中应尽量避免强制解包,必须使用时需添加注释说明非nil保证,特别是在处理不可靠数据源时更应谨慎。最佳实践建议优先使用安全解包方式,仅在特殊场景(如IBOutlet)才考虑强制解包。

2026-04-02 16:09:15 218

原创 HarmonyOS Next之深入解析使用Grid实现瀑布流网格布局

本文介绍了如何在HarmonyOS NEXT中实现图片瀑布流布局。首先定义了包含图片ID、标题、描述、尺寸、作者信息和统计数据的ImageItem接口。使用@State装饰器管理图片数据和UI状态,包括分类选择、排序方式和搜索关键词。通过getFilteredImages方法实现数据过滤和排序功能。最后利用WaterFlow组件构建两列瀑布流布局,每个FlowItem包含图片卡片,支持保持原始宽高比,并集成了收藏按钮和图片信息展示功能。整个布局采用响应式设计,适配不同屏幕尺寸。

2025-12-19 17:45:42 408

原创 HarmonyOS Next之深入解析Grid网格布局打造精美的照片相册管理集

本文介绍了照片相册应用的基础网格布局实现方案。首先定义了相册和照片的数据模型,包含ID、名称、数量、封面、日期等字段。然后详细展示了页面布局的实现代码:1)使用Text组件实现标签切换功能,通过currentTab状态变量控制样式;2)采用Grid组件实现2列相册视图布局,包含封面图片和相册信息;3)使用3列网格布局展示最近项目,每个项目包含照片和可选的位置信息覆盖层。布局代码展示了ArkUI组件如何通过属性设置实现美观的相册展示效果。

2025-12-19 15:22:44 1089

原创 HarmonyOS Next之深入解析Grid网格布局列表的交互与状态管理

Grid 组件是 ArkUI 框架中强大的网格布局容器,与 GridItem 子组件配合使用可创建灵活的网格布局。该组件支持自定义行列数、尺寸占比控制、子组件跨行列、间距设置和滚动能力等特性。通过 rowsTemplate 和 columnsTemplate 属性可设置网格布局的行列数量与占比,未设置时可通过 layoutDirection 决定排列方式。Grid 还支持绑定 Scroller 对象实现滚动控制,适用于日历翻页等场景。实战中可用于构建商品展示等网格布局,通过设置两列模板和行列间距实现整齐排列

2025-12-19 14:37:20 1234

OpenEL GS滤镜处理(缩放滤镜、灵魂出窍滤镜、抖动滤镜、闪白滤镜、毛刺滤镜、幻觉滤镜).zip

详细地介绍了缩放滤镜、灵魂出窍滤镜、抖动滤镜、闪白滤镜、毛刺滤镜、幻觉滤镜实现原理和实现流程,并详细的注释说明的代码逻辑。

2020-08-22

OpenGL ES之手写绘画板.zip

OpenGL ES之手写绘画板:详细的实现了PaintView的画笔的颜色、尺寸、笔触等设定切换,并运用OpenGL ES自定义着色器实现画板曲线的绘制,并实现了重做、重绘、橡皮擦、撤销、清除等逻辑的实现。

2020-09-09

GLSL之“大长腿”美颜效果.zip

GLSL之“大长腿”美颜效果:详细地实现了图片的“大长腿”的效果,获取纹理的高度, 并根据纹理的高度以及宽度, 计算出图片合理的宽度;根据当前控件尺寸和纹理尺寸,计算初始纹理坐标等重点逻辑的详细实现和注释讲解

2020-08-29

CoreFoundation源码

CoreFoundation源码分析

2021-07-27

HarmonyOS之演示如何通过相机模块相关接口实现拍照、录像等功能.zip

相机模块支持相机业务的开发,可以通过已开放的接口实现相机硬件的访问、操作和新功能开发,最常见的操作如:预览、拍照、连拍和录像等。也可以通过合适的接口或者接口组合实现闪光灯控制、曝光时间控制、手动对焦和自动对焦控制、变焦控制、人脸识别以及更多的功能。

2021-08-02

Metal之MTLBuffer批量加载顶点数量较多的图形渲染.zip

Metal之MTLBuffer批量加载顶点数量较多的图形渲染: 详细的实现了完整的逻辑和详尽的注释说明, 以及顶点数据的存储方式以及它们的应用场景

2020-08-28

iOS自定义KVC的实现和使用.zip

完整地实现了iOS自定义KVC的流程和步骤,并备注详细的说明和解释,方便阅读和理解!

2021-06-05

Swift之Internationalization处理及App内切换.zip

Swift之Internationalization:详细的实现了Swift版本地国际化处理和在App内的语言切换实现逻辑,并封装了语言切换辅助类,可直接拖入工程使用,实现App内的快速语言切换

2020-08-25

HarmonyOS之演示音频播放、音频采集、音量管理和短音播放等功能.zip

音频模块支持音频业务的开发,提供音频相关的功能,主要包括音频播放、音频采集、音量管理和短音播放等。 1、音频播放的主要工作是将音频数据转码为可听见的音频模拟信号并通过输出设备进行播放,同时对播放任务进行管理。 2、音频采集的主要工作是通过输入设备将声音采集并转码为音频数据,同时对采集任务进行管理。 3、音量管理的主要工作是音量调节,输入/输出设备管理,注册音频中断、音频采集中断的回调等。 4、短音播放主要负责管理音频资源的加载与播放、tone音的生成与播放以及系统音播放。

2021-08-02

Swift之“索引”快速定位.zip

Swift之“索引”快速定位:详细的实现了给TableView新增“索引”数组快速定位查找,按照“首字母”的顺序排列展示数据.

2020-08-25

RxSwift基本使用.zip

详细的介绍了RxSwift的安装和配置,并实现了部分控件的基本使用,包含“监听单个 textField 内容的变化(文本响应)”、“实现UIButton点击响应”、“定时器”、“KVO”、“手势”、“通知”等RxSwift的简化写法,代码更简洁,易读性更高。

2020-09-04

HarmonyOS之演示照片/视频、位置、日历、麦克风的权限申请并通过访问相关业务确认授权是否成功.zip

本示例演示了照片/视频、位置、日历、麦克风的权限申请,并通过访问相关业务确认授权是否成功。应用权限是程序访问操作某种对象的许可。权限在应用层面要求明确定义且经用户授权,以便系统化地规范各类应用程序的行为准则与权限许可

2021-08-02

HarmonyOS之如何使用音视频播放控制框架实现音乐播放功能.zip

本示例展示了如何使用音视频播放控制框架实现音乐播放功能。主要功能包括了曲目播放、暂停、上一首、下一首、播放进度、跳转曲目列表等功能。曲目列表展示曲目名称,并选中播放曲目。 音视频播放控制框架,主要包括浏览器(AVBrowser)、控制器(AVController)、浏览器服务(AVBrowserService)、会话(AVSession)四部分组成。这四部分构成了音视频播放控制框架的核心。

2021-08-02

HarmonyOS之演示帧动画、数值动画、属性动画和组合动画的实现.zip

动画是组件的基础特性之一,精心设计的动画使 UI 变化更直观,有助于改进应用程序的外观并改善用户体验。 1、帧动画是利用视觉暂留现象,将一系列静止的图片按序播放,给用户产生动画的效果。 2、AnimatorValue 数值从0到1变化,本身与 Component 无关。开发者可以设置0到1变化过程的属性,例如:时长、变化曲线、重复次数等,并通过值的变化改变组件的属性,实现组件的动画效果。 3、AnimatorProperty 可以为 Component 设置某个属性或多个属性而实现动画效果。

2021-08-02

HarmonyOS之Java UI的CustomLayout.zip

本示例演示了Java UI框架提供的自定义布局能力。在不同屏幕分辨率下对子组件进行测量,确定子组件的大小,在屏幕横向空间不足的情况下,下一个子组件将进行自动换行。 本示例仅支持在标准系统上运行,打开应用所展示的界面即为自定义的布局。

2021-08-02

HarmonyOS以长列表联系人为例,演示ListContainer组件的基本使用.zip

ListContainer是用来呈现连续、多行数据的组件,包含一系列相同类型的列表项。 本示例通过长列表联系人的案例来演示 ListContainer 组件的基本使用方法。

2021-08-02

Metal之动态切换屏幕颜色.zip

Metal之动态切换屏幕颜色:详细地实现了运用Metal实现颜色动态渲染和屏幕的颜色自动切换功能,并配置详细的注释和逻辑实现流程

2020-08-25

Apple 可编译 objc 源码.zip

Apple可编译objc源码:可追踪查看的iOS的底层实现和相关源码,可以编译调试iOS相关的底层实现原理探索,深入了解iOS的低层封装和源码思想。

2020-09-15

Metal之基于世界坐标系下渲染三角形.zip

Metal渲染三角形是基于世界坐标系下的渲染显示,运用Metal着色器、CJLRenderer渲染循环类等实现彩色三角形的渲染显示

2020-08-26

GLSL滤镜之马赛克.zip

OpenGL ES之运用GLSL详细的实现了“灰度马赛克 ”、“颠倒马赛赛克”、“方形马赛克”、“六边形马赛克”、“三角形马赛克”滤镜效果的详细实现和注释说明

2020-08-21

Kotlin编写的示例spring引导应用程序

用kotlin编写的示例spring引导应用程序,使用spring引导执行器管理应用程序,并使用swagger2作为API文档

2023-08-10

Objective C之计算+load方法的耗时

使用 hook 监测 +load 执行时间方案,并结合 CocoaPods 实现一行代码集成耗时监测的功能。

2022-04-04

Objective C之Hook所有+load方法简单示例

详细地实现了Hook所有+load方法的流程:动态库LoadRuler的添加、获取MachO和所有类的关键代码,以及Category的处理等

2022-04-02

SwiftUI高级动画之路径Paths、几何效果GeometryEffect与AnimatableModifier的效果实现

本示例详细地实现了SwiftUI高级动画的路径Paths(形状路径如何动画化、如何创建可动画数据、如何用小数画边、如何设置多个参数的动画、超过两个可动画的参数、如何通过 VectorArithmetic 使自己的类型动画化等动画效果的实现),几何效果GeometryEffect(关键帧动画、动画反馈、跟随路径创建视图、ignoredByLayout() 方法等)以及AnimatableModifier等。

2022-03-05

HarmonyOS之基于Data Ability的关系型数据库操作方法.zip

本示例通过注解和继承来实现数据库和表的创建,实现了数据库的升级、备份、删除、恢复,实现了表的增删改查,并监听数据变化。 @Database注解,且继承了OrmDatabase的类,对应关系型数据库; @Entity注解,且继承了OrmObject的类,对应关系型数据库中的表; OrmContext实现数据库的升级、备份、删除、恢复,表的增删改查并监听数据变化。 使用说明: 点击插入按钮插入数据,点击更新按钮更新数据,点击删除按钮删除数据,点击查询按钮查询数据并显示查询结果; 点击升级按钮数据库升级,从版本1升级到3,会从1升级到2再从2升级到3; 点击备份按钮数据库备份,点击删除数据库按钮删除数据库,点击恢复按钮恢复数据库。

2021-08-02

SwiftUI之绘制徽章视图的路径和形状

本篇教程就是SwiftUI使用路径和形状创建徽章的过程,创建的徽章可以和其它图形组合形成位置标志。如果想要针对不同种类的地标创建不同的徽章,可以尝试改变徽章基本组成符号的重复次数、角度或大小。跟着教程一步步走,可以下载工程文件进行实践。

2022-01-29

SwiftUI之如何处理特定的数据和如何在视图中适配数据模型对象.zip

SwiftUI之详细地实现了如何标记特定的数据,如何过滤数据列表,如何添加控件来切换状态、如何使用可观察对象来存储数据,如何视图中适配数据模型对象等功能与逻辑

2021-12-20

SwiftUI之创建列表展示页和导航跳转详情页.zip

SwiftUI之详细的实现了如何创建行视图、自定义行预览、创建地标展示列表、创建动态列表、设置从列表页到详情页的页面导航等功能和逻辑实现

2021-12-19

SwiftUI之如何创建和组合视图.zip

详细地实现了SwiftUI如何定制文本视图(Text View),如何使用栈来组合视图,如何创建自定义图像视图,以及UIKit视图与SwiftUI视图混合使用等

2021-12-18

HarmonyOS之实现对象关系映射数据库的升级、备份、删除、恢复以及表的增删改查.zip

本示例通过注解和继承来实现数据库和表的创建,实现了数据库的升级、备份、删除、恢复,实现了表的增删改查,并监听数据变化。 @Database注解,且继承了OrmDatabase的类,对应关系型数据库; @Entity注解,且继承了OrmObject的类,对应关系型数据库中的表; OrmContext实现数据库的升级、备份、删除、恢复,表的增删改查并监听数据变化。 说明: 点击插入按钮插入数据,点击更新按钮更新数据,点击删除按钮删除数据,点击查询按钮查询数据并显示查询结果; 点击升级按钮数据库升级,从版本1升级到3,会从1升级到2再从2升级到3; 点击备份按钮数据库备份,点击删除数据库按钮删除数据库,点击恢复按钮恢复数据库。

2021-08-03

HarmonyOS之演示生物特征识别应用于设备解锁、应用登录、支付等身份认证场景.zip

本示例演示了生物特征识别应用于设备解锁、应用登录、支付等身份认证场景。当前生物特征识别支持2D人脸识别、3D人脸识别,可应用于设备解锁、应用登录、支付等身份认证场景。

2021-08-02

HarmonyOS之通过 Preferences 创建、删除、更新和查询应用程序偏好数据实现登录页面偏好数据存取及主页面背景色偏好数据存取.zip

轻量级偏好数据库主要提供轻量级Key-Value操作,支持本地应用存储少量数据。本示例通过 Preferences 创建、删除、更新和查询应用程序偏好数据,主要实现了登录页面偏好数据存取及主页面背景色偏好数据存取。 说明: 启动页面勾选不再显示,保存该偏好数据,下次启动应用不再显示该页面,直接进入模拟登录页面。 模拟登录页面输入用户名和密码,点击登录跳转到主页面,自动保存登录状态,下次不再显示模拟登录页面。 主页面点击应用背景色后,再点击对应颜色可保存背景色,点击清除偏好设置,清除已保存的背景色。

2021-08-03

Python之俄罗斯方块源代码及程序.zip

Python实现的俄罗斯方块,具有单人模式、普通双人模式、镜像双人模式(即掉落方块都一样)、双人加速模式(每消去一行都会给对方加速)、双人交换控制模式(一次控制自己的方块,一次控制对方的)、双人平衡模式(会改变对方的容量)、双人单容器模式,并且游戏的界面设计也是相当简洁舒服。

2021-10-28

Python之Kivy乒乓球游戏的实现与kv规则.zip

Python Kivy实现乒乓球游戏和kv规则

2021-10-16

iOS之列表性能优化异步绘制.zip

iOS之列表性能优化异步绘制:不依赖任何第三方pod框架,主要从异步线程绘制、图片异步下载渲染等方面,尽可能优化UITableView的使用,提高滑动流畅性

2021-10-07

iOS之RSA加解密的方法实现.zip

集成了RSA生成密钥对、加载公钥、加载私钥、数据加密和数据解密等功能的工具类,iOS可以直接拖入工程使用RSA的加解密。

2021-09-06

iOS之多环境的配置.zip

运用多target形式、多scheme方式以及 config 配置文件配置多环境的工程配置示例

2021-08-05

HarmonyOS之基于Service Ability的启动、停止、连接、断开连接等操作及跨设备操作.zip

基于 Service 模板的 Ability(以下简称 "Service")主要用于后台运行任务(如执行音乐播放、文件下载等),但不提供用户交互界面。Service 可由其他应用或 Ability 启动,即使用户切换到其他应用,Service 仍将在后台继续运行。

2021-08-11

HarmonyOS之音乐播放器展示前台Service的使用方法.zip

本示例通过音乐播放器,展示了前台Service的使用方法。一般情况下Service都是在后台运行的,后台Service优先级都是比较低的,当资源不足时,系统有可能回收正在运行的后台Service。一些场景下(如:播放音乐),用户希望应用一直运行,此时就需要用到前台Service。前台Service会使用保持正在运行的图标在系统状态栏显示。 本示例主界面分为三个按钮,点击Start Play按钮会启动前台服务并播放音乐,点击Pause Play按钮会暂停播放音乐,前台服务继续运行,点击Stop Play按钮会停止播放音乐并关闭前台服务。

2021-08-11

PageAbility.zip

Page 模板的 Ability,用于提供与用户交互的能力。一个 Page 可以由一个或多个 AbilitySlice 构成,AbilitySlice 是指应用的单个页面及其控制逻辑的总和。跨设备迁移支持将 Page 在同一用户的不同设备间迁移,以便支持用户无缝切换的诉求。

2021-08-10

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除