类的数据结构
-
无成员变量的内存结构
-
内存分析示意图
-
有成员变量的内存结构
-
内存视图
-
实时查看内存数据
-
LLDB-指令
-
LLDB 练习
创建一个实例对象,至少需要多少内存?
#import <objc/runtime.h>
class_getInstanceSize([NSObject class]);
创建一个实例对象,实际上分配了多少内存?
#import <malloc/malloc.h>
malloc_size((__bridge const void *)obj);
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
#import <malloc/malloc.h>
// NSObject Implementation
struct NSObject_IMPL {
Class isa; // 8个字节
};
// 指针
// typedef struct objc_class *Class;
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSObject *obj = [[NSObject alloc] init];
// 16个字节
// 获得NSObject实例对象的成员变量所占用的大小 >> 8
NSLog(@"%zd", class_getInstanceSize([NSObject class]));
// 获得obj指针所指向内存的大小 >> 16
NSLog(@"%zd", malloc_size((__bridge const void *)obj));
// 什么平台的代码
// 不同平台支持的代码肯定是不一样
// Windows、mac、iOS
// 模拟器(i386)、32bit(armv7)、64bit(arm64)
}
return 0;
}
- 小于16的情况下补齐到16
oc对象的分类
- Objective-C 中的对象简称OC对象,主要分为三种
- instance对象 实例对象
- class对象 类对象
- meta-class 元类对象