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

server/2025/1/19 14:16:53/

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/server/159645.html

相关文章

redis监控会不会统计lua里面执行的命令次数

问题&#xff1a;redis lua里面执行的命令会不会计算到监控的qps中 假设&#xff1a; lua 脚本中对数据库操作了1w次。 执行一次lua 脚本&#xff0c; 虽然内部对数据库操作了1w次&#xff0c; 但是从redis 监控上看只是执行了一次lua脚本&#xff0c; lua内部对数据库的1w次不…

深度学习-87-大模型训练之预训练和微调所用的数据样式

文章目录 1 大模型训练的阶段1.1 预训练1.1.1 全量预训练1.1.2 二次预训练1.2 微调2 预训练需要的数据2.1 清洗成的文本文档2.2 如何从文本文档学习2.3 常见预训练中文语料库3 微调需要的数据3.1 微调例子一:电商客服场景3.2 微调例子二:行政咨询场景3.3 微调数据长什么样3.3…

牛客----mysql

查找某个年龄段的用户信息_牛客题霸_牛客网 描述 题目&#xff1a;现在运营想要针对20岁及以上且23岁及以下的用户开展分析&#xff0c;请你取出满足条件的设备ID、性别、年龄。 用户信息表&#xff1a;user_profile iddevice_idgenderageuniversityprovince12138male21北京…

多语言插件i18n Ally的使用

先展示一下效果 1.第一步首先在vscode下载插件 2.第二步在 setting.json 里面配置 要区分文件是js&#xff0c;ts或json结尾 以zh.ts和en.ts结尾的用这个 { "i18n-ally.localesPaths": ["src/locales"],"i18n-ally.keystyle": "nested"…

TDengine 做 Apache SuperSet 数据源

‌Apache Superset‌ 是一个现代的企业级商业智能&#xff08;BI&#xff09;Web 应用程序&#xff0c;主要用于数据探索和可视化。它由 Apache 软件基金会支持&#xff0c;是一个开源项目&#xff0c;它拥有活跃的社区和丰富的生态系统。Apache Superset 提供了直观的用户界面…

电脑风扇声音大怎么办? 原因及解决方法

电脑风扇是电脑的重要组件之一&#xff0c;它的作用是为电脑的各个部件提供冷却&#xff0c;防止电脑过热。然而&#xff0c;有时候我们会发现电脑风扇的声音特别大&#xff0c;不仅影响我们的使用体验&#xff0c;也可能是电脑出现了一些问题。那么&#xff0c;电脑风扇声音大…

Android BitmapShader更简易的实现刮刮乐功能,Kotlin

Android BitmapShader更简易的实现刮刮乐功能&#xff0c;Kotlin 比这种方式 Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现“刮刮乐”效果&#xff0c;Kotlin&#xff08;2&#xff09;-CSDN博客 更简单实现刮刮乐效果。 import android.content.Cont…

基于微信小程序的健身房预约管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…