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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1722413885 中级黑马   /  2014-4-8 16:20  /  1702 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 1722413885 于 2014-4-8 16:23 编辑

oc中我们要重写dealloc方法,但是dealloc方法中,例如- (void)dealloc
{
  NSLog(@"对象被回收了");
[super dealloc];
}
dealloc没有具体的释放内存的语句,内存是如何释放的?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览
沙洲冷 来自手机 中级黑马 2014-4-8 16:33:39
沙发
[super dealloc];语句最终会调用NSObject的dealloc方法,NSObject的dealloc方法中应该有释放内存的操作吧。以上是我的个人理解,不一定对啊。
回复 使用道具 举报
支持arc,在[super dealloc]语句前会自动release成员变量; [super dealloc];在调用父类的-dealloc方法,再释放父类的成员变量后不断往上调,最终会调到NSObject的-dealloc方法,此方法释放本身内存。大概。
回复 使用道具 举报
释放内存的语句 就是release
>当一个对象的引用计数器为0时,他会被销毁,所占用的内存会被回收

>当一个对象被销毁时,系统会自动向对象发送一条dealloc消息

>一般会重写dealloc方法,并且一定要调用[super dealloc],并且放在最后在这里释放相关资源

我们能知道的能做的就是重写父类方法- (void)dealloc,可以在其中release其他对象,

但是至于release如何清楚内存中的对象,我们开发时不需要知道,因为这是透明的。

最后我个人觉得应该是通过覆盖内存地址达到的清除,就像我们在电脑上删除文件一样,删除过后,如果你并不操作,一样可以找回来,因为并没有被覆盖。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马