WEB开发网
开发学院手机开发iPhone 开发 iPhone 中的内存管理 阅读

iPhone 中的内存管理

 2010-03-17 20:57:00 来源:WEB开发网   
核心提示:3.5 内存管理在iPhone开发中,对内存进行正确的管理是非常重要的一个方面,iPhone 中的内存管理,iPhone有128MRAM,但其中约有一半的容量要用于屏幕缓冲和其他系统进程,该语句表示复制对象obj2,并将复制结果赋给obj1,同时iPhone不支持将内存写到交换文件,所以iPhone只有大约64M的内存

3.5 内存管理

在iPhone开发中,对内存进行正确的管理是非常重要的一个方面。iPhone有128MRAM,但其中约有一半的容量要用于屏幕缓冲和其他系统进程,同时iPhone不支持将内存写到交换文件,所以iPhone只有大约64M的内存用来运行应用程序,且严格受到物理内存量的限制。这样,基本上不容许我们开发的软件存在任何的内存泄露。

iPhone中的内存管理

由于iPhone对内存严格的要求,所以当一个对象不再需要时,要及时释放它所占用的内存空间。

Objective-C 的内存管理采用了基于引用计数(Reference Count)这种非常常用的技术。简单讲,每个对象都有一个与之关联的整数,可以将它称为引用计数器或保留计数器,如果要使用一个对象,并确保在使用期间对象不被释放,需要通过函数调用来取得“所有权”,即引用计数器加1,使用结束后再调用函数释放“所有权”,使引用计数器减1。“所有权”的获得和释放,对应引用计数的增加和减少。引用计数为正数时代表对象还有引用,为0时代表可以释放。

回想前面的例子,[NoteClass alloc]就是为对象分配内存并使它的引用计数器的值为1,而[note1 release]则是负责将note1对象的引用计数值减1,如果检测到note1的引用计数值为0,则note1对象会被释放掉,同时调用 dealloc方法。但在这里要牢记的是,在Objective-C中,必须严格使用引用计数机制来控制内存的分配与释放,当对象的引用计数为0时,对象会自动进行释放,并调用dealloc方法,我们绝不可以自行调用dealloc方法。

下面就来详细说明一下内存是如何管理的。

用于内存管理的方法

在开发过程中,主要使用以下方法来对内存进行管理。

获得对象当前引用计数的方法

(1) -(NSUInteger)retainCount:方法返回当前对象的引用计数值。

获得对象所有权的方法:

(1) +(id)alloc:这是一个类方法,相信现在你已对它非常熟悉了,它负责为新建的对象分配内存并将新对象返回,同时将该对象的引用计数值设置为1。如果使用了该方法,则被创建的对象要负责调用release方法或autorelease方法来释放对象所有权,从而避免内存泄露。

(2) ? (id)copy:拷贝引用该方法的对象,返回新复制的对象,被赋值的对象引用计数值加1。像obj1 = [obj2 copy],该语句表示复制对象obj2,并将复制结果赋给obj1,同时将obj1的引用计数值加1。

1 2 3  下一页

Tags:iPhone 内存 管理

编辑录入:coldstar [复制链接] [打 印]
赞助商链接