iphone开发--内存管理
来源:互联网 发布:身份证模拟软件 编辑:程序博客网 时间:2024/05/03 13:27
内存管理是iphone开发中很重要的一个环节,没有处理好会是系统出现很多问题,
很严重的一个就是直接导致程序闪退。因此,内存管理是很让新手头疼的,也是新手晋
级为菜鸟必走的一个环节。今天讨论的主题就是内存管理。
内存管理包括:内存分配,对象使用,对象挂起,对象使用,内存释放。在使用之前
我们要为其分配空间,使用中保留其空间,使用完后要释放其空间。简单的分配和释放只
是内存管理的初级阶段。当我们引入对象所有权这一概念时,内存管理的难度就变大了。
对象所有权与接下来要解释的三个名词有关。
首先,我们要解释三个名次:create,retain和copy。
create和retain都会使对象的【object count】值加1,此时拥有对象所有权,因此使用
完后必须对其释放。copy不会是对象的【object count】值加1,此时没有拥有对象所有权,
使用完后不需对其释放。
在对象定义中需要注意的点(以NSMutbaleString和NSMutableArray为例):
NSMutableArray
initWithObject: //对象的引用计数值不变
arrayWithObject: //对象的引用计数值不变
arrayWithObject: //对象的引用计数值加1
addObject: //对象的引用计数值加1
arrayWithArray: //对象的引用计数值加1,被参考的引用对象值也加1
initWithArray: //对象的引用计数值加1
initWihtArray: copyItem: //对象的引用计数值从1开始
NSMutableString
initWithFormat: //对象的引用计数值不变
initWithString://对象的引用计数值不变
然后开始说明,在对象使用中的内存管理。
在容器中添加对象,将使对象的【object count】值加1,包括nsarray、nsdictionary。
引用的对象在使用完后需要释放,否则会导致内存泄漏。
在getter和setter方法中:
-(NSNumber *)count
{
return _count;
}
-(void)setCount:(NSNumber *)newCount
{
[newCount retain];
[_count release];.//在OC中,对象为没有初始化也可以执行这一步操作
_count = newCount;
}
-(void)reset
{
NSNumber *zero = [[NSNumber alloc] initWithInteger:0];
[self setCount:zero];
[zero release];
}
-(void)reset
{
NSNumber *zero = [NSNumber initWithInteger:0];
[self setCount:zero];
}
在类变量初始函数和析构函数(dealloc)中,不需要对类变量执行初始化操作。
-init
{
self = [super init];
if(self)
{
_count = [[NSNumber alloc] initWithInteger:0];
}
return self;
}
-initWithCount:(NSNumber *)startingCount
{self = [super init];
if(self)
{
_count = [startingCount copy];
}
return self;
}
使用中的对象可能面临着被释放的危险,包括如下两种情况
1> heisenObject将被释放:
heisenObject = [array objectAtIndex:n];
[array removeObjectAtIndex:n];
2>
id parent = <#create a parent object#>;
heisenObject = [parent child];
[parent release];
因此防止如上情况的出现,我们可以采取如下的对策:
heisenObject = [[array objectAtIndex:n] retain];
[array removeObjectAtIndex:n];
//user heisenObject...
[heisenObject release];
最后,附上官网上关于内存管理的解说图对此次内存管理解说做个总结。希望对大家掌握内存管理有所帮助!
- iPhone开发内存管理
- iPhone开发内存管理
- iphone开发 内存管理
- iPhone开发内存管理
- iPhone开发内存管理
- iphone开发--内存管理
- iPhone开发内存管理
- iPhone开发内存管理
- iPhone开发中的内存管理
- iPhone开发指南-内存管理
- iPhone开发内存管理之一
- ios iphone开发-内存管理
- iPhone开发中的内存管理
- iPhone开发内存管理之一
- iPhone开发内存管理之一
- 【引用】iPhone开发内存管理
- iPhone开发中的内存管理 (转)
- iPhone开发中的内存管理 (转)
- android EditText怎样限制用户的输入?数字/字母/邮箱
- 浅析RMXP自动元件绘制原理
- 基于flex的三层架构特效之效果介绍
- 我的理解之Flex Event
- Reservoir sampling 数组随机等概率选择样品
- iphone开发--内存管理
- pku oj 1001 Exponentiation
- C# 默认访问权限
- 内存缓存策略探析
- 推荐书籍
- POJ 1195 Mobile phones
- 服务器开发—谈谈游戏数据结构
- 倒排索引--lucene
- Java数据结构学习之 有序非循环双向链表的实现