您的位置:首页 > 移动开发 > IOS开发

OC对象的内存分析

2016-09-17 12:46 225 查看
先来看一段代码:

    

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 内存管理 内存