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