当前位置: 首页 > article >正文

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

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;    // 是否优化的 isa
        uintptr_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 key
    id *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.kler.cn/a/505404.html

相关文章:

  • 在AI智能中有几种重要的神经网络类型?6种重要的神经网络类型分享!
  • sql_实用查询语句模版
  • python学opencv|读取图像(三十一)缩放图像的三种方法
  • WINFORM - DevExpress -> gridcontrol ---->控件(ColumnEdit控件)
  • Golang 设计模式
  • 【2025 Rust学习 --- 17 文本和格式化 】
  • 计算机网络之---SSL/TLS协议
  • 人工智能任务20-利用LSTM和Attention机制相结合模型在交通流量预测中的应用
  • Excel 技巧09 - 通过IF筛选数据,并给对象单元格赋值背景色 (★)
  • maven 安装jar到本地仓库和上传至远程仓库
  • Java开发防止SQL注入攻击
  • 深度学习的超参数
  • dockerfile实现lnmp
  • 深度学习-卷积神经网络实战文档注释
  • 【精选】基于EfficientViT优化YOLOv8的智能车辆识别系统设计 车辆颜色分类与车牌检测、深度学习目标检测系统开发
  • MySQL(高级特性篇) 07 章——InnoDB数据存储结构
  • 在一个地方待多久才会改变ip属地
  • openmetadata二次开发之前端汉化
  • 【excel】VBA股票数据获取(搜狐股票)
  • xilinx FPGA 平台实现数字信号 -- 低通滤波
  • word添加参考文献并批量上标
  • ASP.NET Core - IStartupFilter 与 IHostingStartup
  • 【网络 MAC 学习专栏 -- 如何理解 PHY 的 Link Up】
  • 《数据思维》之数据可视化_读书笔记
  • Mysql 之 阻塞与死锁详解
  • 2025 年将是统一网络安全的一年