ios开发:OC对象的内存分析_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > ios开发:OC对象的内存分析

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

 2015/3/30 17:30:14  周周周少爷  程序员俱乐部  我要评论(0)
  • 摘要:最近要开始准备找实习单位了,做做笔试题,看看各位大神的面试经历,发现自己要学习的东西真的还有很多,虽然也做过几个的项目,但是真正拿过笔试题一看,才发现自己对基础这方面的东西,确实有点忽视了,所以最近开启恶补模式。这几天在研究ios内存分析这一块,才发现自己原来忽视了这么多重要的东西,在这里和大家分享一下。先来看一段代码:NSString*s;s=[[NSStringalloc]initWithString:@"helloios"];这是一段最简单的字符串定义,但是看似简单
  • 标签:iOS 开发 分析 内存

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

   这几天在研究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出来的对象的内存在堆内存中,栈内存中的指针通过赋值指向堆内存中的对象,然后通过栈内存中的指针访问对象及其变量,也就是说,其实我们在创建一个对象时其实是利用了两个部分的内存空间。

  

上一篇: 微软与台湾酒店合作,推出Xbox One主题套房 下一篇: 没有下一篇了!
发表评论
用户名: 匿名