iOS - 底层实现中涉及的类型

devtools/2025/1/16 23:23:24/

1. 基本类型定义

// 基础类型
typedef unsigned long       uintptr_t;   // 指针大小的无符号整数
typedef long               ptrdiff_t;    // 指针差值类型
typedef unsigned int       uint32_t;     // 32位无符号整数
typedef unsigned long long uint64_t;     // 64位无符号整数// 掩码类型
typedef uintptr_t          mask_t;      // 用于位掩码操作

2. 对象相关类型

// 对象类型
typedef struct objc_object *id;          // 对象指针
typedef struct objc_class  *Class;       // 类指针
typedef struct method_t    *Method;      // 方法指针// isa 相关
union isa_t {uintptr_t bits;                      // 完整的指针值struct {uintptr_t nonpointer     : 1;    // 是否优化的 isauintptr_t has_assoc      : 1;    // 是否有关联对象uintptr_t has_cxx_dtor   : 1;    // 是否有 C++ 析构函数uintptr_t shiftcls       : 33;   // 类指针// ...其他位域};
};

3. 弱引用相关类型

// 弱引用表结构
struct weak_table_t {weak_entry_t *weak_entries;          // 哈希数组size_t num_entries;                  // 实际条目数uintptr_t mask;                      // 容量掩码
};// 弱引用条目
struct weak_entry_t {DisguisedPtr<objc_object> referent;  // 被引用对象union {struct {weak_referrer_t *referrers;   // 动态数组uintptr_t out_of_line : 1;    // 是否使用动态数组uintptr_t num_refs : PTR_MINUS_1;  // 引用计数};struct {weak_referrer_t inline_referrers[WEAK_INLINE_COUNT]; // 内联数组};};
};

4. 锁相关类型

// 自旋锁
typedef struct {volatile int32_t value;
} OSSpinLock;// 互斥锁
typedef struct {pthread_mutex_t mutex;
} mutex_t;// 读写锁
typedef struct {pthread_rwlock_t lock;
} rwlock_t;

5. 缓存相关类型

// 方法缓存
struct cache_t {struct bucket_t *_buckets;           // 哈希数组mask_t _mask;                        // 容量掩码mask_t _occupied;                    // 已使用数量
};// 缓存桶
struct bucket_t {SEL _key;                           // 方法选择器IMP _imp;                           // 方法实现
};

6. 内存管理类型

// 引用计数类型
typedef struct {size_t refcount;                    // 引用计数值bool weakly_referenced;             // 是否有弱引用
} refcount_t;// 自动释放池页
struct AutoreleasePoolPage {static pthread_key_t key;           // TLS keyid *next;                          // 下一个空位置pthread_t thread;                  // 所属线程AutoreleasePoolPage *child;        // 子页面
};

7. 函数指针类型

// 方法实现类型
typedef id (*IMP)(id, SEL, ...);        // 方法实现指针// 清理函数类型
typedef void (*cleanup_func_t)(void *);  // 清理函数指针// 析构函数类型
typedef void (*dtor_func_t)(id);         // 析构函数指针

8. 枚举类型

// 关联对象策略
typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) {OBJC_ASSOCIATION_ASSIGN = 0,          // 弱引用OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,// 强引用非原子OBJC_ASSOCIATION_COPY_NONATOMIC = 3,  // 复制非原子OBJC_ASSOCIATION_RETAIN = 01401,      // 强引用OBJC_ASSOCIATION_COPY = 01403         // 复制
};

总结要点:

1. 类型分类:

  • 基础数值类型
  • 对象相关类型
  • 内存管理类型
  • 同步机制类型

2. 类型特点:

  • 位域优化
  • 内存对齐
  • 平台兼容
  • 性能考虑

3. 使用注意:

  • 类型安全
  • 内存布局
  • 平台差异
  • 性能影响

http://www.ppmy.cn/devtools/151096.html

相关文章

C语言-数据结构-队列

目录 1.队列的特点 2.队列的实现 2.1.初始化队列 2.2.入队列 2.2.1.入空队列 2.2.2.入非空队列 2.3.出队列 2.4.销毁队列 2.5.完整代码 3.实际应用 1.队列的特点 队列是一种常见的数据结构&#xff0c;它遵循先进先出&#xff08;FIFO, First In First Out&#xff09…

electron编写一个macOS风格的桌面应用

electron编写一个macOS风格的桌面应用 基于vue3vite&#xff0c;看一下最后的效果&#xff1a; 针对原始的electron模板&#xff0c;做了如下几点调整&#xff1a; 背景边框进行了圆角处理隐藏了原始的titleBar增加了macOS风格的窗口管理工具&#xff0c;就是交通灯按钮组实现…

api开发及运用小红书笔记详情api如何获取笔记详情信息

item_get_video-获得某书笔记详情 smallredbook.item_get_video 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,i…

RPC 源码解析~Apache Dubbo

解析 RPC&#xff08;远程过程调用&#xff09;的源码可以帮助你深入理解其工作原理和实现细节。为了更好地进行源码解析&#xff0c;我们选择一个流行的 RPC 框架——Apache Dubbo 作为示例。Dubbo 是一个高性能、轻量级的开源 Java RPC 框架&#xff0c;广泛应用于企业级应用…

机器学习在服务监控中的创新应用:提升运维效率与可靠性

《机器学习在服务监控中的创新应用:提升运维效率与可靠性》 一、引言 在当今复杂的信息技术环境中,服务监控对于确保系统的稳定运行至关重要。传统的服务监控方法往往依赖于预定义的阈值和规则,但在面对复杂多变的服务行为时,这些方法可能会显得力不从心。机器学习的出现…

AI知识-TF-IDF技术(Term Frequency-Inverse Document Frequency)

摘要 TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;是一种常见的统计方法&#xff0c;用于评估一个词对于一个文档集或一个语料库中的其中一份文档的重要性。本文将全面阐述TF-IDF的通俗理解、技术原理、应用场景&#xff0c;并做以总结。 通俗理…

《OpenCV》——模版匹配

文章目录 OpenCV——模版匹配简介模版匹配使用场景OpenCV 中模板匹配的函数参数 OpenCV——模版匹配实例导入所需库读取图片并处理图片对模版图片进行处理进行模版匹配显示模版匹配的结果注意事项 OpenCV——模版匹配简介 OpenCV 是一个非常强大的计算机视觉库&#xff0c;其中…

Spring Boot 3.x 整合 Logback 日志框架(支持异步写入)

Spring Boot 3.x 整合 Logback 日志框架&#xff08;支持异步写入&#xff09; 在构建任何应用程序时&#xff0c;良好的日志管理都是必不可少的。日志可以帮助我们监控、调试和跟踪代码的运行情况。 1. 添加日志配置文件 在 /resources 资源目录下&#xff0c;创建名为 log…