前言
属性对各位iOS开发者来说应该都不陌生,如果iOS中谈到取属性,相信大家都会夸夸其谈,不就是get方法吗?或者大谈kvc取属性的机制。不得不说这些也是对的。这时大家可能就疑惑了,那你还要说啥的!!大家不妨想想,这些都是代码层的实现,其实我们的代码最终都会被编译,然后加载到内存中,那你在内存中是怎么取到属性的呢??对的我们讨论就是它!下面话不多说了,来一起看看详细的介绍吧。
指针
如果说到内存,不知道大家会不会想到**指针**呢?这里简单介绍一下,让大家有个简单的理解。如果理解不了的话,建议大家找一个C语言的教程,学一下指针。
指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
*那到底什么是指针呢??
类型 * 变量名
这就是声明了一个指针变量
指针类型有什么作用呢?
比如:
int* num;
指针变量的类型决定了通过这个指针找到变量的首地址以后,连续操作多少个字节空间
为什么会说连续操作多少个字节空间??主要是指针有算术运算加减,说白了就是指针的移动。
指针是int* 连续操作4个字节 指针是double* 连续操作8个字节比如
int* p = #
p++;
当指针+1的时候,这时候指针要移动1个单元,而不是1个字节!!
那到底这1个单元是多大呢?其实1个单元的大小就是指针类型的大小。这里是`int`型,所以移动了4个字节
-------------------------------------------------------------------------------------------
以上就是简单给大家做了**指针**介绍,其实理解了指针,对于我们出现的一些野指针的bug、runtime源码中的一些机制等等是有所帮助的。言归正传。接下来让我看一道题,真正的去了解内存和指针的关系。
int num1 = 10;
int num = 20;
int* p = #
p++;
printf("%d
",*p);//打印为10,因为p++,指针已经移动了4个字节,下一个内存存储10正好是4个字节
这里其实是前边声明了一个num1,正好是4个字节,所以就将10取出来了。(说白了就是内存中下一个连续的4个字节存的是什么取出来就是什么)
说了这么多都是指针和内存,建议大家搞明白以上内容再读以下的内容,如果上边都搞不明白的话,下边有关iOS中runtime取属性的内容有可能就会云里雾里。










