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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 昨夜雨轻栏 于 2015-2-3 11:47 编辑

李明杰老师,咆哮帝!讲解的很清楚,但是听多了可能会容易绕,李老师说过OC中对对象的操作都是以指针的形式进行的,下面是我自己对内存管理中对象释放的理解

有创建就有释放,有调用必有释放,以保证内存的生命流水线循环,这是本质
就以视频中的BOOK和Person两个类型为例吧,其中Person有成员变量_book;

毫无疑问,每个对象被创建之初Book *b = [[Book alloc ] init];,有一个指针指向它(这里为b),系统会为它和它的指针分配内存,这里有一个指针指向该对象,所以计数器初始值为1;   (对应的在后面会有一次release)

当Person *p=[[person alloc] init]对象拥有上面已经创建的Book对象,则实质上有Book *_book = b;概述为Person对象中有一个_book指向已经创立的Book对象,到这里有两个指针指向该对象,所以计数器值为1+1=2;

好,下面说release
[ b release];
b=nil;
b被清空,所以它不再指向Book对象,所以计数器减一,计数器值为2-1=1也就是说,到这里有剩一个指针_book指向Book对象;

执行下一步,如果_book也被清空([p release]),那么它也不再指向Book对象,计数器减一,到这里有1-1=0个指针指向Book对象,此处该对象会被销毁,它的生命周期完成,
我们可以看到对象计数器,实际上就是指向对象指针的个数,它为零则对象会被销毁,创建或者调用都会产生指向对象的指针,计数器加一;有创建就有释放,有调用必有释放,保证了在生命周期完成(对象销毁)之后指向它的指针恒为零,或者指向它的指针为零对象销毁;这是我理解的内存管理的原则


2 个回复

倒序浏览
自顶一个、、、
回复 使用道具 举报
感谢分享!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马