• 卡顿原因

    概述iOS开发中,由于UIKit的非线程安全性,所有UI操作必须在主线程执行。系统每16ms(1/60帧)重绘UI至屏幕。若主线程进行耗时操作或发生死锁,会阻碍UI刷新,导致卡顿甚至卡死。主线程基于Runloop机制处理任务,Runloop支持多种事件回调,包括事件进入、处理前后等时机。若主线程在任一环节被阻塞,会导致UI和交互都无法进行,这是卡死、卡顿的根本原因。 线程和锁线程和...
  • Day11-环形链表

    🔗 LeetCode 141 - Linked List Cycle 📌 题目描述给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。 示例: 12输入:head = [3,2,0,-4], pos = 1输出:true 💡 解题思路使用快慢指针: 慢指针...
  • Day11-GCD vs NSOperation 框架对比

    一、基本介绍 方面 GCD NSOperation 所属框架 C 语言底层 API,Foundation 框架 Foundation 框架的面向对象封装 编程范式 函数式(Block) 面向对象(Operation 对象) 线程管理 自动管理线程 基于 NSOperationQueue,封装良好 适用场景 性能优先,轻量并发控制 更复杂的任务依赖和管理需求 二、核心...
  • Day10-三数之和

    🔗 LeetCode 15 - 三数之和 📌 题目描述给你一个整数数组 nums,判断是否存在三元组 [nums[i], nums[j], nums[k]],满足: 12i ≠ j、i ≠ k 且 j ≠ knums[i] + nums[j] + nums[k] == 0 请你返回所有和为 0 且不重复的三元组。你不能包含重复的三元组。 示例: 12输入:nums = [-1,0,1,...
  • Day10-GCD 进阶

    一、GCD 队列底层原理1.1 队列类型 串行队列:一次只执行一个任务。 并发队列:可以并发执行多个任务。 主队列:主线程的串行队列,用于更新 UI。 1.2 队列背后的线程 GCD 使用 线程池 管理线程,具体由 libdispatch + pthread 实现。 并发队列任务实际是串行调度、并发执行(由系统根据线程池和资源自动调度)。 二、常见 GCD 高级用法2.1 dispatc...
  • 避免视图绘制掉帧

    图像显示原理iOS 图像显示的原理涉及多个层次,从底层的硬件加速到上层的框架实现。UIKit 提供了高层次的 API,用于管理应用的用户界面元素,包括视图、控件和图像显示。UIImageView 是 UIKit 中用于显示图像的主要类。Core Graphics (也称为 Quartz) 是 iOS 的 2D 绘图引擎。它直接与硬件交互,负责图形的绘制和处理。UIKit 的许多绘图操作最终都...
  • Swift 语法

    语法基础变量变量是可变的,使用 var 修饰,常量是不可变的,使用 let 修饰。类、结构体和枚举里的变量是属性。 12345678910var v1:String = "hi" // 标注类型var v2 = "类型推导"let l1 = "标题" // 常量class a { let p1 = 3 var ...
  • Day9-只出现一次的数字

    🔗 LeetCode 136 - Single Number 📌 题目描述给定一个非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须在线性时间复杂度内完成算法,并且不能使用额外空间。 示例: 12输入: [4,1,2,1,2]输出: 4 💡 解题思路 异或运算的关键特性: a ^ a = 0 a ^ 0 = a 所以...
  • Day9-RunLoop 卡顿优化与监控实现

    iOS RunLoop 卡顿优化指南一、理解 RunLoop 卡顿的本质1. RunLoop 基本机制RunLoop 本质上是一个事件循环机制,主要用于线程的任务调度。在主线程中,RunLoop 负责处理: 触摸事件 定时器事件(NSTimer、CADisplayLink) UI 渲染 GCD 主队列任务 系统事件(比如键盘弹出) 2. 卡顿现象原因主线程卡顿的本质是 RunLoop 长...
  • Day8-验证回文串

    🔗 LeetCode 125 - Valid Palindrome 📌 题目描述给定一个字符串,判断它是否是回文,只考虑字母和数字字符,可以忽略字母的大小写。 示例: 12345输入: "A man, a plan, a canal: Panama"输出: true输入: "race a car"输出: false 💡 解题思路 使用双指针法...