博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OC 内存管理法则
阅读量:7050 次
发布时间:2019-06-28

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

1.allocnewcopy来创建一个对象,那么你必须调用releaseautorelease。换句话说,不是你创建的,就不用你去释放。(谁创建谁释放,对象所有权负责释放)

2.如果你在一个class的某个方法中alloc一个成员对象,且没有调用autorelease或及时releaase, 那么你需要在这个类的dealloc方法中调用release;如果调用 了autorelease,那么在dealloc方法中什么 都不需要做。

3.尽量用sel.xxx = xxx来对对象进行赋值操作,在对象不用的时候也可以用self.xxx = nil来对其释放

注意下面这个例子里,你无需保留新建的数值,因为数组会帮你保留。

 NSMutableArray *array;

int i;

// …

for (i = 0; i < 10; i++) 

{

NSNumber *n = [[NSNumber alloc] initWithInt: i];

[array addObject: n];

[n release];

}

本例中,在for循环里你需要给n发送一个-release消息,因为你需要始终在-alloc之后将n的数量保持为1。这么做的原因是当其通过-addObject:方法被添加至数组中时,数组已经将其保存起来。即使你释放了n,但是这个数字由于已经保存在数组里,所以不会被释放。

为了了解这些,假设你自己就是编写数组类的人。你不希望接收的对象未经你同意就消失,所以你会在对象传递进来时,对其发送一个-retain消息。如果他们被删除,你同时也要对应地发送一个-release消息。在你自己-dealloc时,你也要给你收到的所有对象发送一个-release。

转载于:https://www.cnblogs.com/X-Code/archive/2013/01/21/2870491.html

你可能感兴趣的文章
个人收集的java精品网站
查看>>
036 关于网站的UV分析
查看>>
zabbix监控网络的出入口流量
查看>>
webstorm 破解方式
查看>>
动画综合练习(延迟进入+页面向导+文本框抖动)
查看>>
Notepad++ JSON关键字自动提示
查看>>
全息科普1 【转】
查看>>
Git 撤消操作(分布式版本控制系统)
查看>>
导出表中数据为insert语句
查看>>
mysql中如何更新一个字段的值为它本身的值连接上一个字符串
查看>>
在Telerik for silverlight控件radtreeview中如何通过路径得到节点(转载)
查看>>
图像处理之拼接---图像拼接opencv
查看>>
【分享】博客美化(2)自定义博客样式细节
查看>>
字节对齐导致的iOS EXC_ARM_DA_ALIGN崩溃
查看>>
TCHAR和CHAR类型的互转
查看>>
HtmlAgilityPack 处理通配的contains
查看>>
hadoop和spark搭建记录
查看>>
NPOI2.0学习(二)
查看>>
把插入的数据自动备份到另一个表中 ~ 语境:本地和服务器自动同步
查看>>
缓存穿透 缓存雪崩
查看>>