一、RunLoop 的构成RunLoop 是基于 CFRunLoopRef(Core Foundation 层)构建的,NSRunLoop 是其 Foundation 层的封装。核心组成如下:
1. RunLoop 对象
每条线程都有唯一的一个 RunLoop 对象(主线程默认创建,子线程需手动创建)。
2. RunLoopMode
RunLoop 在任一时刻只能运行在一种模式下。
常见模...
🔗 LeetCode 21 - Merge Two Sorted Lists
📌 题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
12输入: l1 = [1,2,4], l2 = [1,3,4]输出: [1,1,2,3,4,4]
💡 解题思路
使用 递归 或 迭代 方法逐步将两个链表中较小的节点连接起来;
递归写法...
RuntimeiOS Runtime,通常称为Objective-C Runtime,是iOS开发中一个至关重要的组件。它是一套底层的C语言API,为Objective-C的动态特性提供了强大的支持。本文将对iOS Runtime进行深入的解析,从基本概念到主要功能,再到实际应用和注意事项,全方位地展示这一技术的魅力。
一、Runtime基本概念Runtime,即运行时,指的是程序在运行过程...
🔗 LeetCode 26 - Remove Duplicates from Sorted Array
📌 题目描述给你一个 升序排列 的数组 nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 O(1) 额外空间的条件下原地修改输入数组。
示例:
12输入: nums = [1,1,2]输出: 2, nums = [1,...
一、定义Runtime 是什么?
Objective-C 的 Runtime 实际上是 C 语言的一套函数和类库,用于支持 Objective-C 编程语言的动态性,包括类的创建、方法调用、属性访问等。
二、Runtime 实战技巧1.Method Swizzling(方法交换)1. 什么是 Method Swizzling?
定义:在程序运行时,交换两个方法实现的过程。
本质:修改方...
🔗 LeetCode 167 - Two Sum II - Input Array Is Sorted
📌 题目描述给定一个已按升序排列的整数数组 numbers 和一个目标值 target,请你在数组中找出两个数,使得它们的和为目标值 target,并返回这两个数的下标。
注意:
返回的答案是一个 1 索引的数组。
假设每个输入只对应一个答案,且你不可以重复使用数组中的元素。
...
Objective-C Runtime 基础结构Objective-C 运行时系统(Runtime)是 Objective-C 语言的核心部分,它在程序运行期间负责管理类、对象、方法调用等行为。
主要的结构体和组件包括:
1. objc_class(类结构体)123456789101112struct objc_class { Class isa; ...
🔗 LeetCode 242 - Valid Anagram
📌 题目描述:给定两个字符串 s 和 t,编写一个函数来判断 t 是否是 s 的字母异位词。
字母异位词的定义:如果两个字符串中的字母出现的频率相同且字符完全一致,那么这两个字符串是字母异位词。
💡 解题思路:• 将两个字符串 s 和 t 的字母出现频次统计出来,若两个字符串的字母频次完全相同,则它们是字母异位词。
• 通...
Block 内存管理 & 循环引用分析1. Block 的结构体本质Block 在底层其实是一个结构体:
12345678struct Block_literal { void *isa; // 指向 Block 类对象 int flags; // 标志位(是否有 copy/di...
🔗 LeetCode 20 - Valid Parentheses
📌 题目描述给定一个只包括 '(', ')', '{', '}', '[', ']' 的字符串 s,判断字符串是否是有效的。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序...