- 博客(6)
- 资源 (1)
- 收藏
- 关注
原创 oc对象isa分析
首先看一下isa的初始化inline void objc_object::initIsa(Class cls, bool nonpointer, bool hasCxxDtor) { ASSERT(!isTaggedPointer()); if (!nonpointer) { isa = isa_t((uintptr_t)cls); } else { ASSERT(!DisableNonpointerIsa); AS
2020-09-11 17:35:24
219
原创 内存对齐原理
内存对齐的原则:数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int为4字节,则要从4的整数倍地址开始存储。结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b里有char,int ,double等元
2020-09-11 16:18:06
239
原创 objective-c alloc分析
一个简单的例子先定义一个继承于NSObject的对象Test@interface Test : NSObject@end运行 Test *t0 = [Test alloc]; Test *t1 = [t0 init]; Test *t2 = [t0 init]; NSLog(@"%@ -- %p -- %p",t0,t0,&t0); NSLog(@"%@ -- %p -- %p",t1,t1,&t1); NSLog(@"%@ -
2020-09-05 14:43:37
316
原创 iOS离屏渲染
设置了cornerRadius和layer.masksToBounds为true是触发离屏渲染的条件,但不是所有情况下都会触发离屏渲染的。查看离屏渲染1.情况一:设置cornerRadius、backgroundColor,没有触发离屏渲染 UIView *view = [[UIView alloc]init]; view.frame = CGRectMake(100, 100, 100, 100); [self.view addSubview:view]; view.
2020-07-14 17:16:36
411
原创 绘制正方形并进行移动
绘制基础图形并进行移动准备工作初始化正方形的数据实现回调函数准备工作第一步,在main函数中初始化OpenGL并注册回调函数 //用来设置当前工作目录 gltSetWorkingDirectory(argv[0]); //初始化GLUT库 glutInit(&argc, argv); /* 初始化双缓冲窗口,其中标志GLUT_DOUBLE、GLUT_RGBA、GLUT_DEPTH、GLUT_STENCIL分别指 双缓冲窗口
2020-07-09 15:06:55
541
原创 OpenGL名词解析
OpenGL名词解析OpenGL 上下⽂(context)在应用程序调用任何OpenGL的指令之前,需要安排首先创建一个OpenGL的 上下⽂。这个上下文是一个⾮常庞大的状态机,保存了OpenGL中的各种状态,这也是OpenGL指令执⾏的基础OpenGL的函数不管在哪个语言中,都是类似C语⾔⼀样的⾯向过程的函数,本质上都是对OpenGL上下文这个庞大的状态机中的某个状态或者对象 进行操作,当然你得首先把这个对象设置为当前对象。因此,通过对 OpenGL指令的封装,是可以将OpenGL的相关调⽤封
2020-07-09 14:15:37
218
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人