Object-C内存管理
Object-C的内存管理是基于引用计数的。你要做的事情只是关注你的引用,而释放内存的工作实际上由运行环境完成。
在最简单的情形中,你分配(alloc)的对象,或只是保留(retain)在一些地方的对象,都需要给他们发送一个release消息。这也意味着,如果你使用了一次alloc,然后又retain了一次,那么你需要release两次才能释放该对象的内存。
这就是引用计数的理论。在实际应用中,通常只有两个原因我们才会创建一个对象:
1.作为一个实例变量保留。
2,在函数内部作为临时变量使用。
大多数情况下,一个实例变量的setter会自动释放(autorelease)原来引用的对象,同时保留(retain)新的。你只需要保证在dealloc函数中释放(release)了它就行了。
那么,我们实际要做的工作就只有管理函数内部的本地引用了。在这里只有一条规则:如果你通过alloc或者copy创建了一个对象,在函数结尾的地方给它发送一个release或者autorelease消息就行了。如果你是通过其他方式创建的对象,就什么也别做。
下面是第一个例子,管理实例变量:
- (void) setTotalAmount:(NSNumber *)input
{
[totalAmount autorelease];
totalAmount = [input retain];
}
- (void)dealloc
{
[totalAmount release];
[super dealloc];
}
下面是另外一个例子,关于本地引用。我们只需要释放通过alloc创建的对象就行了:
NSNumber *value1 = [[NSNumber alloc] initWithFloat:8.75];
NSNmuber *value2 = [NSNumber numberWithFloat:14.78];
[value1 release];//这里只需要release value1就行
下面是一个组合例子,将一个本地引用设置给实例变量:
NSNumber *value1 = [[NSNumber alloc] initWithFloat:8.75];
[self setTotalAmount:value1];
NSNumber *value2 = [NSNumber numberWithFloat:14.78];
[self setTotalAmount:value2];
[value1 release];
注意,不论你是不是把本地引用当成实例变量一样赋值,管理它们都是完全相同的。你不必考虑setter是如何实现的。
如果你理解了这些,你就理解了关于Object-C内存管理中90%你需要知道的内容。
Object-C内存管理的更多相关文章
- 12.Object-C--浅谈OC的内存管理机制
昨天学习了OC的内存管理机制,今天想总结一下,所以接下来我要在这里bibi一下:OC的内存管理. 首先我要说的是,内存管理的作用范围. 内存管理的作用范围: 任何继承了NSObject的对象,对其他基 ...
- .NET基础拾遗(1)类型语法基础和内存管理基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...
- cocos2d-x内存管理
Cocos2d-x内存管理 老师让我给班上同学讲讲cocos2d-x的内存管理,时间也不多,于是看了看源码,写了个提纲和大概思想 一. 为什么需要内存管理 1. new和delete 2. 堆上申 ...
- iOS开发系列—Objective-C之内存管理
概述 我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是由系统自己管理的,放在栈上).如果一个对象创建并使用后没 ...
- Android 内存管理 &Memory Leak & OOM 分析
转载博客:http://blog.csdn.net/vshuang/article/details/39647167 1.Android 进程管理&内存 Android主要应用在嵌入式设备当中 ...
- Python深入06 Python的内存管理
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的 ...
- 【转】iOS夯实:ARC时代的内存管理
iOS夯实:ARC时代的内存管理 什么是ARC Automatic Reference Counting (ARC) is a compiler feature that provides autom ...
- 理解 iOS 的内存管理
远古时代的故事 那些经历过手工管理内存(MRC)时代的人们,一定对 iOS 开发中的内存管理记忆犹新.那个时候大约是 2010 年,国内 iOS 开发刚刚兴起,tinyfool 大叔的大名已经如雷贯耳 ...
- Objective-C内存管理之-引用计数
本文会继续深入学习OC内存管理,内容主要参考iOS高级编程,Objective-C基础教程,疯狂iOS讲义,是我学习内存管理的笔记 内存管理 1 内存管理的基本概念 1.1 Objective-C中的 ...
- 内存管理内幕mallco及free函数实现
原文:https://www.ibm.com/developerworks/cn/linux/l-memory/ 为什么必须管理内存 内存管理是计算机编程最为基本的领域之一.在很多脚本语言中,您不必担 ...
随机推荐
- C#索引器的作用及使用
1. 作用: 可以使得类和实例能够像数组那样使用一样,又称为带参属性 2. 区分 (1)索引器与数组的比较: 索引器的索引值不受类型限制.用来访问数组的索引值一定是整数,而索引器可以是其他类型的索引值 ...
- 用opencv画矩形打上马赛克Mosaic
/*----------------------------------------------------------------------------- * * 版权声明: * 可以 ...
- [codevs1380]没有上司的舞会
本题地址 http://www.luogu.org/problem/show?pid=1352 http://codevs.cn/problem/1380/ 题目描述 某大学有N个职员,编号为1~N. ...
- bzoj 3172 [Tjoi2013]单词(fail树,DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3172 [题意] 题目的意思是这样的,给若干个单词,求每个单词在这一堆单词中的出现次数. ...
- 定时备份为Sharepoint做网站备份,并删除指定日期的备份
一.创建bat文件 @echo cd \ c: cd "Program Files\Common Files\Microsoft Shared\web server extensions\1 ...
- linux 密码安全脚本
#!/bin/bash #by:osx1260@.com DIESO=/etc/pam.d PAMSO=$(ls $DIESO/* |awk -F'/' '{print $4}') NEPAMUN=' ...
- 编译android版libmpg
环境:ubutnu 12.04,android SDK 1. 下载libmpg的一个android工程,得到一个Android-libmpg-master.zip.https://github.com ...
- poj 1438--One-way Traffic(边的双连通)
给定一个图,并给定边,a b c(c==1||c==2) 表示ab之间有c条边 求把尽可能多的有向边定向变成强联通图. 先把图当做无向图,加边时记录是否有边,dfs的时候不要把本没有的边用到!因为这个 ...
- [每日一题] 11gOCP 1z0-053 :2013-10-7 the backup of MULT_DATA................................32
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12500579 正确答案:D RMAN 的新增功能 对超大型文件应用 Intraf ...
- hdu 2102 A计划(优先队列+dfs)
改了好久,上午来实验室打出来了,运行就是不对,一直找啊找!还是没找到,最后突然停电了,打好的代码还没保存呢! 刚才来的时候又重新打了一遍!!!结果一个小小的错误wrong了好久!!! 在dfs值返回时 ...