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

OC内存管理-1

时间:2015-04-09 00:54:15      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

 

栈区:从高到低分配

堆区:从低到高

BSS段:没有初始化的

数据区:

代码段:

 

OC内存管理方式:

1 MRC 手动内存管理

2 ARC 自动内存管理

 

nil是给对象赋空值

 

 

下个有道云笔记

 

内存管理

一.总结:

1.只有OC对象才需要内存管理,基本数据类型无效

2.OC对象存放在堆里面

3.非OC对象一般放在栈里面(栈内存会被系统自动回收)

 

二.引用计数器:

1.每个OC对象都有自己的引用计数器

2.它是一个整数(int)

3.表示有多少人正在使用这个对象

4.每个OC对象都有4个字节的存储空间来存放引用计数器

5.当没有任何人使用这个对象时,即对象的引用计数器为0时候,对象占用的内存就会自动回收

6.任何对象一旦创建好,默认引用计数器就是1

 

StartFragmentEndFragment

三.引用计数器的常见操作:

1.给对象发送一条retain消息, 可以使引用计数器值+1(retain方法返回对象本身)

StartFragment

2.给对象发送一条release消息, 可以使引用计数器值-1

3.给对象发送retainCount消息, 可以获得当前的引用计数器值(可以通过%ld输出查看)

 

StartFragment

•注意:我们只能通过操作对象计数器,间接控制对象的释放与否。

 

四.引用计数器控制

[d retain]; //引用计数器+1

[d release]; //引用计数器-1

[d retainCount];//获得引用计数器的值,返回值是long int

 

 

五.引用计数器为0

StartFragment

1.当一个对象的引用计数器值为0时,这个对象即将被销毁,其占用的内存被系统回收,系统会自动给对象发送一条dealloc消息

2.一般会重写dealloc方法, 在这里释放相关资源, dealloc就是对象的遗言

StartFragment EndFragment

3.一旦重写了dealloc方法, 就必须调用[super dealloc],并且放在最后面调用,硬性规定!

StartFragment EndFragment EndFragment

StartFragment EndFragment EndFragment

4.一旦对象被回收了, 它占用的内存就不再可用, 坚持使用会导致程序崩溃(野指针错误)为了防止调用出错,可以将“野指针”指向nil(0)。

5,在对象被销毁之后, 将指向对象的指针变为空指针(p=nil)

 

代码:

- (void) dealloc{

 

    NSLog(@"??死了");

    [super dealloc];//这句话必须写,且必须写在最后

}

 

 

六.手动内存管理的原则

1.谁创建,谁release

2.retain,谁release

3.只要有人在用,那么这个对象就不会被回收

4.有始有终,有加就应该有减。曾经让某个对象计数器加1,就应该让其在最后-1.

OC内存管理-1

标签:

原文地址:http://www.cnblogs.com/chenqingxiao/p/4404952.html

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