博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS OBjective-C 内存概念 (4、循环引用和总结)
阅读量:5916 次
发布时间:2019-06-19

本文共 791 字,大约阅读时间需要 2 分钟。

hot3.png

一、循环引用和总结(内存管理的经典问题)

    对象A retain对象B,同时对象B retain对象A。这时两个对象A和B都没有办法得到释放。这种情况我们称之循环引用。如下示:

//B类中设置A- (void)setA:(A *)a{   if(_a != a)   {      [_a release];      _a = [a retain];   }}- (void)dealloc{   [_a release];   [super dealloc];}
//A类中设置B- (void)setB:(B *)b{   if(_b != b)   {      [_b release];      _b = [b retain];   }}- (void)dealloc{   [_b release];   [super dealloc];}

二、内存管理总结

    当你使用new、alloc或copy方法创建一个对象时。该对象的引用计数为1。当不在使用该对象时,你要负责向该对象发送一条release或者autorelease消息。这样,该对象将在其使用对象结束时销毁。

    你通过任何其他方法获得一个对象时,则假设该对象的引用计数为1,而且已经被设置为自动释放,你不需要执行任何方法来释放对象。如果你打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它。

    如果你保留了某个对象,你需要释放或自动释放该对象。必须保持retain方法和release方法的使用次数相等。

    除了alloc、new或copy之外的方法创建对象都被声明了autorelease。谁retain,谁release。只要你调用了retain,无论这个对象是如何生成的,你都要调用release。

转载于:https://my.oschina.net/u/1426828/blog/298639

你可能感兴趣的文章
android.support.v7.widget.SwitchCompat
查看>>
白话composer的简单使用
查看>>
SPI机制与策略模式
查看>>
使用 Docker 和 Traefik 搭建 GitLab (前篇)
查看>>
如何让mysql索引更快一点
查看>>
免费logo创建器launchaco
查看>>
从拥挤的兔子到伪随机数算法
查看>>
随便写写
查看>>
kotlin 中 Collection 相关操作
查看>>
java序列化
查看>>
Visual Studio不只是让你用来拖拖控件
查看>>
Android大图片加载以及EXIF信息读取写入
查看>>
vmware让虚拟机内外网络可互访
查看>>
CSS样式之选择器
查看>>
不可忽视的项目文档管理
查看>>
刀片服务器故障一例
查看>>
第四章—使用函数
查看>>
puppet 部署jdk
查看>>
如何利用路由器防止DoS拒绝服务疯狂攻击
查看>>
使用 JFreeChart来创建基于web的图表
查看>>