码迷,mamicode.com
首页 > 移动开发 > 详细

ios开发:OC对象的内存分析

时间:2015-03-30 17:51:13      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

   最近要开始准备找实习单位了,做做笔试题,看看各位大神的面试经历,发现自己要学习的东西真的还有很多,虽然也做过几个的项目,但是真正拿过笔试题一看,才发现自己对基础这方面的东西,确实有点忽视了,所以最近开启恶补模式。

   这几天在研究ios内存分析这一块,才发现自己原来忽视了这么多重要的东西,在这里和大家分享一下。

   先来看一段代码:

    

NSString* s;
s = [[NSString alloc] initWithString:@"hello ios"];

  这是一段最简单的字符串定义,但是看似简单,其实有很多东西可能会被忽略掉

  1.这里的s其实是个指针,在oc中除了基本数据类型之外的变量类型都是指针类型,oc的对象也是通过指针进行操作的。

  2. 在第一段代码定义了NSString类型的指针变量,但是并没有指向任何对象,第二段代码alloc一个NSString对象  然后使s指向它,并通过s开始其的后续操作。

  3. 这里s的内存空间在栈内存中,“hello ios”在堆内存中。

下面通过图示说明一下

技术分享

再来看一个例子

@interface C: NSObject
{
  int a;
  int b;       
}
@end


int main(int argc, const char *argv[])
{
  C *c1 = [[C alloc]init];
  C *c2 = [[C alloc]init];      
}

内存分布情况

技术分享

  看到这里大家也就能明白了,oc中创建的对象指针存储在栈内存中,而alloc出来的对象的内存在堆内存中,栈内存中的指针通过赋值指向堆内存中的对象,然后通过栈内存中的指针访问对象及其变量,也就是说,其实我们在创建一个对象时其实是利用了两个部分的内存空间。

  

ios开发:OC对象的内存分析

标签:

原文地址:http://www.cnblogs.com/zyi1992/p/4378293.html

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