黑马程序员-iOS基础-Objective-C基础(七)
来源:互联网 发布:一维数组与指针 编辑:程序博客网 时间:2024/06/08 14:49
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
更多关于内存管理
Objective-C的内存管理系统基于引用记数。所有我们需要关心的就是跟踪我们引用,以及在运行期内是否真的释放了内存。
用最简单的术语来解释,当我们alloc一个对象的时候,应该在某个时候retain了它。每次我们调用了alloc或者retain之后,我们都必须要调用release。
这就是引用记数理论。但是在实践的时候,只有两种情况我们需要创建一个对象:
1. 成为一个类的成员变量
2. 只临时的在一个函数里面被使用
在更多的时候,一个成员变量的setter应该仅仅autorelease旧的对象,然后retain新的对象。我们只需要在dealloc的时候调用release就可以了。
所以真正需要做的就是管理函数内部的local的引用。唯一的原则就是:假如我们alloc或者copy了一个对象,那么我们在函数结束的时候需要release或者autorelease它。假如我们是通过别的方式创建的,就不管。
这里是管理成员对象的例子:
- - (void) setTotalAmount: (NSNumber*)input
- {
- [totalAmount autorelease];
- totalAmount = [input retain];
- }
- - (void) dealloc
- {
- [totalAmount release];
- [super dealloc];
- }
这里是本地引用的例子。我们只需要release我们用alloc创建的对象:
- NSNumber* value1 = [[NSNumber alloc] initWithFloat:8.75];
- NSNumber* value2 = [NSNumber numberWithFloat:14.78];
- // only release value1, not value2
- [value1 release];
这里是用本地引用对象去设一个成员变量的例子:
- NSNumber* value1 = [[NSNumber alloc] initWithFloat:8.75];
- [self setTotal:value1];
- NSNumber* value2 = [NSNumber numberWithFloat:14.78];
- [self setTotal:value2];
- [value1 release];
注意到如何管理本地引用其实都是一样的。不管你是否把它设给了一个成员变量。我们无须考虑setters的内部实现。
如果我们很好的理解了这些的话,我们基本上理解了80%的Objective-C内存管理方面的内容了。
0 0
- 黑马程序员-iOS基础-Objective-C基础(七)
- 黑马程序员-iOS基础-Objective-C基础(七)block和protocol
- 黑马程序员-iOS基础-Objective-C基础(一)
- 黑马程序员-iOS基础-Objective-C基础(一)
- 黑马程序员-iOS基础-Objective-C基础(二)
- 黑马程序员-iOS基础-Objective-C基础(三)
- 黑马程序员-iOS基础-Objective-C基础(四)
- 黑马程序员-iOS基础-Objective-C基础(五)
- 黑马程序员-iOS基础-Objective-C基础(六)
- 黑马程序员-iOS基础-Objective-C基础(八)
- 黑马程序员-iOS基础-Objective-C基础(九)
- 黑马程序员--iOS--Objective-C基础 (一)
- 黑马程序员——ios基础---Objective-C:基础语法
- 黑马程序员-----------Objective-C基础-----------OC基础
- 黑马程序员-iOS基础-Objective-C基础(五)核心语法(下)
- 黑马程序员-iOS基础-Objective-C基础(二)面向对象思想及类
- 黑马程序员-iOS基础-Objective-C基础(四)OC开发技巧及核心语法(上)
- 黑马程序员-iOS基础-Objective-C基础(六)内存管理
- 【ObjC】@interface类名(categoryName)
- sql 理解
- 兔子--gradle安装和配置
- (3)最大子段和问题____动态规划
- spi 基础知识
- 黑马程序员-iOS基础-Objective-C基础(七)
- iOS 之邮箱正则表达式
- 查看当前系统的glibc版本
- ios + cocos2d-x 友盟SDK触发方法
- Eclipse中查看.properties文件中文乱码问题
- 兼容firfox,ie8+的上下走马灯(效果同ie marquee)
- windows下 C++连接SQL Server 到底用什么驱动?
- 使用mp4v2将H264+AAC合成mp4文件以及调试过程
- 小总结。