A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陌生爱人 中级黑马   /  2014-10-12 22:11  /  791 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

OC内存管理中的计数器思想理解

每个对象刚分配存储空间初始化时候默认计数器为1,然后每有一个新的指针指向他的时候计数器就会加1,每当这个指针不用而撤掉之后要减1,当计数器为0的时候,从内存中清除。

1> retain :计数器+1,会返回对象本身
2> release :计数器-1,没有返回值
3> retainCount :获取当前的计数器
4> 僵尸对象 :所占用内存已经被回收的对象,僵尸对象不能再使用
5> 野指针 :指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS)
6> 空指针 :没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错
7> 在.h文件中用@class来声明类
8> 在.m文件中用#import来包含类的所有东西

注意点:

1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)
2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release)
3.谁retain,谁release
4.谁alloc,谁release
5.当一个对象要被回收的时候,就会调用dealloc函数,一定要调用[super dealloc],这句调用要放在最后面

例:

Book *b = [[Book alloc] init];
// p-1
Person *p1 = [[Person alloc] init];
// b-2
[p1 setBook:b];
// p-0
// b-1
[p1 release];
p1 = nil;
// b-0
[b release];
b = nil;
return 0;

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马