码迷,mamicode.com
首页 > 其他好文 > 详细

NSArray内存布局

时间:2014-12-20 12:56:47      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

Objective-C的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。

那么,OC是如何做到保存不同的对象的呢?NSMutableArray继承自NSArray,他又是如何进行插入和删除操作的呢?如何保存的是对象本身,是链式存储还是顺序存储?如果是顺序存储,那么插入和删除操作岂不是很麻烦?

首先,NSArray保存的是对象的指针,而非对象本身。这样的话,NSArray就可以保存不同的对象的指针;这样对话,NSMutableArray进行插入和删除操作也不会太麻烦(毕竟指针占用的空间小);那么NSArray是如何存储的呢?

Student *stu = [[Student alloc] init];

Student *stu1 = [[Student alloc] init];

Student *stu2 = [[Student alloc] init];

Student *stu3 = [[Student alloc] init];

NSArray *arr = @[stu,stu1,stu2,stu3];

NSLog(@"\narr1 is %p\narr2 is %p\narr3 is %p\narr4 is %p",[arr objectAtIndex:0],[arr objectAtIndex:1],[arr objectAtIndex:2],[arr objectAtIndex:3]);

运行结果如下图:

技术分享

看到这里,我顿时凌乱里,这也不连续啊?这里打印的其实是里面元素的地址。

view of memory "arr"得到:

技术分享

第一个地址0x 01 00 30 01 10是NSArray中isa指针

第二个地址0x 01 00 11 0a 60 是arr4的地址

第三个地址0x 01 00 20 00 10 是arr3的地址

......

好了,到这里为止,我们知道了nsarray的内存布局:顺序存储对象的指针

NSArray内存布局

标签:

原文地址:http://blog.csdn.net/zuiyuezhou888/article/details/42041341

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!