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. 使用注意:
- 类型安全
- 内存布局
- 平台差异
- 性能影响