OC对象
文章平均质量分 84
后跳闪到腰
这个作者很懒,什么都没留下…
展开
-
OC 类的结构分析
网络中有个关于类的关系的图 图中虚线部分是isa的的继承关系 证明如下图 对象->类 //打印16进制person的内存地址 (lldb) p/x person (LGPerson *) $26 = 0x00000001006e8400 //读取person的内存地址 (lldb) x/4gx 0x00000001006e8400 0x1006e8400: 0x001d8001000020f1 0x0000000000000000 0x1006e8410: 0x00000001006e84e0原创 2020-09-14 08:27:47 · 672 阅读 · 0 评论 -
OC isa结构分析
分析isa结构之前,先了解下OC对象 #import <Foundation/Foundation.h> #import "Person.h" @interface Student : NSObject @property(nonatomic,copy) NSString *name; @end @implementation Student @end int main(int argc, const char * argv[]) { @autoreleasepool {原创 2020-09-14 08:26:06 · 270 阅读 · 0 评论 -
iOS 内存对齐原理
计算机中内存空间是按照 byte 划分的,计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数的倍数,这就是所谓的内存对齐。 OC类本质上是一个结构体。以结构体为例 struct Person { double a; // 8 char b; // 1 int c; // 4 short d; // 2 }person; struct Student { double a; //8原创 2020-09-14 08:23:44 · 267 阅读 · 0 评论 -
OC对象alloc、init和new的底层实现
oc中创建一个对象 Person *p = [[Person alloc] init]; 那么alloc做了什么?init又做了什么? 可以通过查看苹果官方开源的objc相关的源码 objc的源码地址 源码是基于objc4-781,781的源码与之前的源码有很大的不同,781做了fastpath和slowpath的区别,781版本代码大概率会走fastpath流程。且与zone相关的api在iOS8之后被废弃了。 源码编译参考iOS_objc4-756.2 最新源码编译调试 alloc 查看源码前看一段代原创 2020-09-08 11:20:40 · 277 阅读 · 0 评论