内存管理是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开发--内存管理相关推荐

  1. iPhone开发内存管理

    开发iPhone 应用程序并不难,基本上就是三个词 - "memory, memory, memory" .iPhone OS 对内存的要求很严格,有memory leak ,杀掉 ...

  2. 【引用】iPhone开发内存管理

    原文地址:http://www.robinlu.com/blog/archives/392  开发iPhone 应用程序并不难,基本上就是三个词 - "memory, memory, mem ...

  3. iPhone开发内存管理之一

    移动开发的特点:资源的有限性.作为手持设备,iphone的内存与传统的PC不可同日而语,这就要求我们在开发IOS程序的过程中,首要也是最重要的任务就是解决内存释放问题,本文将在网络上搜集的关于内存管理 ...

  4. iphone开发 内存管理

    我一般喜欢在开发的最后阶段,才考虑内存管理 那么就需要好的工具,帮你定位,内存泄露的位置. 经过一段时间的研究,已经完美控制了内存的增长 1.通过查找alloc关键字,自己找出项目中需要释放的内存 2 ...

  5. iOS开发内存管理总结

    一.retain.copy.assign的区别: 1.retain:当对一个对象A调用retain,然后赋值给B时,对象的引用计数加1,A和B指向同一个内存地址. 2.copy:当对一个对象A调用re ...

  6. iphone objective-c内存管理

    1:retain返回一个id类型的值,通过这种方式,可以嵌套执行带有其他消息带有参数的保留调用,增加对象的保留计数器值,并要求对象执行某种操作,例如:[[car retain]  setTire:ti ...

  7. iphone内存管理的具体问题解决方案

    iPhone 开发内存管理 开发iPhone 应用程序并不难,基本上就是三个词 - "memory, memory, memory" .iPhone OS 对内存的要求很严格,有m ...

  8. iPhone内存管理详细解说(一)

    iPhone内存管理详细解说系列转载来源:http://keywind.me/blog/2011/05/07/iphonenei-cun-guan-li-xiang-xi-jie-shuo-yi/ 感 ...

  9. iphone 内存管理2

    iPhone 开发过程中,内存的使用至关重要.不但要合理分配使用内存,还要注意内存泄露的问题, 因为内存泄露会导致程序由于内存不足而崩溃.根据个人开发的经验来看,在开发iPhone程序的过程中,关于内 ...

最新文章

  1. 参数服务器训练基本理论
  2. 【numpy学习笔记】矩阵操作
  3. 以为是行废代码,原来有这作用!
  4. 域名解析对网站SEO优化有何影响?
  5. servlet 认证,授权
  6. Android Studio连接手机没反应,提示错误adb.exe start-server' failed -- run manually if necessary
  7. 深度学习和神经网络——第二周笔记
  8. (转) EF三种编程方式的区别Database first ,Model first ,code first
  9. carmaker的弱智算法
  10. 文献参考文献著录规则
  11. Linux如何整数分区,硬盘整数分区怎么计算?NTFS整数分区数值表分享
  12. OpenAI生成二次元美女【辣眼睛慎入】
  13. 冯提出的计算机工作原理是,冯诺依曼提出的计算机的基本工作原理是什么
  14. 安全:金融信息化的命脉
  15. 讲一点色相、饱和度、明度
  16. 在vi 中设置tab键为4个空格,并显示行号,对文件中的TAB与空格进行相互转换
  17. 【Linux】——在Xshell输入ssh root@公网ip进行远程连接Linux失败,显示(port 22): Connection failed的完美解决方法
  18. with复合结构小结
  19. 腾讯研发动画组件,以后动画制作用PAG
  20. 关于Unity5 发布到安卓后帧数低的问题

热门文章

  1. 口胡fhq treap
  2. ESC快速关闭windows资源管理器窗口源码
  3. 英语基础知识:修饰性的句子成分-上篇
  4. CRM——企业内外部管理的重要手段
  5. [转]对于WOW商业系统的回顾
  6. SpringBoot——Bean管理
  7. 牛客网 2018年全国多校算法寒假训练营练习比赛(第四场) 题解
  8. Linux怎么关闭135端口,window2003关闭135,3389端口
  9. IPv4网络地址转换(NAT)
  10. Ucloud之us3不同区域文件同步