这篇文章主要介绍了iOS如何获取属性,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
<强>指针强>
如果说到内存,不知道大家会不会想到* *指针* *呢?这里简单介绍一下,让大家有个简单的理解。如果理解不了的话,建议大家找一个C语言的教程,学一下指针。
指针(指针)是编程语言中的一个对象,利用地址,它的值直接指向(指向)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
<强> *那到底什么是指针呢? ?
强>
,类型*变量名
这就是声明了一个指针变量
<强>,指针类型有什么作用呢? 强>
比如:
int *, num;
指针变量的类型决定了通过这个指针找到变量的首地址以后,连续操作多少个字节空间
为什么会说连续操作多少个字节空间? ?主要是指针有算术运算加减,说白了就是指针的移动。
- <李>
指针是int *连续操作4个字节
李> <李>指针是双*连续操作8个字节
李>比如
int *, p =# p + +;
当指针+ 1的时候,这时候指针要移动1个单元,而不是1个字节! !
那到底这1个单元是多大呢?其实1个单元的大小就是指针类型的大小。这里是int型,所以移动了4个字节
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
以上就是简单给大家做了* *指针* *介绍,其实理解了指针,对于我们出现的一些野指针的错误,运行时源码中的一些机制等等是有所帮助的。言归正传。接下来让我看一道题,真正的去了解内存和指针的关系。
int num1 =, 10; int num =, 20; int *, p =# p + +; printf (“% d “* p);//打印为10,因为p + +,指针已经移动了4个字节,下一个内存存储10正好是4个字节
这里其实是前边声明了一个num1,正好是4个字节,所以就将十取出来了。(说白了就是内存中下一个连续的4个字节存的是什么取出来就是什么)
说了这么多都是指针和内存,建议大家搞明白以上内容再读以下的内容,如果上边都搞不明白的话,下边有关iOS中运行时取属性的内容有可能就会云里雾里。
<强> iOS中成员变量与属性强>
以下题目是sunnyxx习题中的一题,网上也有详细的[答案)(http://blog.csdn.net/shznt/article/details/50481819)。这里作者就简述一下自己的理解,如果想看非常详细的答案的话可以点击上边的链接。
下面代码会吗?编译错误/运行时崩溃/NSLog…?
@interface Sark : NSObject @property (原子,,复制),NSString *名称; @end @implementation 衬衣 安康;(空白)说话 { ,NSLog (@" my name  is % @",, self.name); } @end @interface Test : NSObject @end @implementation 测试 安康;(instancetype) init {=,self [super init); ,if (自我),{ ,id cls =, (Sark 类); ,void * obj =,, cls; ,((__bridge id) obj 说话); ,} ,return 自我; } @end 命令行参数个数,int 主要(int const char *, argv []), { ,@autoreleasepool { alloc], [[Test init); ,} ,return 0; }
答案:代码正常输出,输出结果为:
2014-11-07 14:08:25.698测试(1097:57255)我的名字叫
,为什么能够正常运行,并调用到说话方法?
计算机将我们的“袍”类信息通过
的id cls=(衬衣类);这一行加载到内存中,并且取得了cls的变量。这个时候其实我们只要知道“cls”这个变量的地址就行了,其实相当于类的对象的地址。“void * obj=, cls。”这句话就让我们获得了对象的地址。(平时我们“新”对象的时候就干了两件事:1,申请内存;2,获取内存的地址(对象变量的地址就是内存的地址),这里的对象与我们“新”出来的对象有所不同。但是虽然不是新的对象,iOS中“类”对象已经存储了我们需要的东西。比如有关变量的内存* *偏移* *,方法等等所有的信息)接下来可以干我们想干的任何事情了。