Cocoa内存管理规则与垃圾回收

移动开发 iOS
Cocoa内存管理规则与垃圾回收是本文要介绍的内容,主要是来学习如何来解决cocoa内存管理的问题。不多说,直接来看详细内容详解。

Cocoa内存管理规则与垃圾回收是本文要介绍的内容,主要是来学习如何来解决cocoa内存管理的问题。不多说,直接来看详细内容详解。

Cocoa内存管理规则

(1)当你使用new、alloc、copy方法创建一个对象时,该对象的保留计数器值为1.当不再使用该对象时,你要负责向该对象发送一条release或autorelease消息。这样,该对象将在其使用寿命结束时被销毁。

(2)当你通过其他方法获得一个对象时,这假设该对象的保留计数器值为1,而且已经被设置为自动释放,你不需要执行任何操作来确保该对象被清理。如果你打算在一段时间内拥有该对象,这需要保留它并确保在操作完成时释放它。

(3)如果你保留了某个对象,你需要(最终)释放或自动释放该对象。必须保持retain方法和release方法的使用次数相等。

“如果我使用了new、alloc或copy方法获得一个对象,则我必须释放或自动释放该对象。”只要你记住了这条规律,你就平安无事了。

无论什么时候拥有一个对象,有两间事情必须弄清楚:怎样获得该对象的?打算拥有该对象多长时间。

例如:

  1. NSMutableArray *array;array = [[NSMutableArray alloc] init]; //count: 1// use the array[array release]; // count: 0 

上例中使用alloc方法获得了array,所以需要安排该对象的释放([array release])

又如:

  1. NSMutableArray *array;array = [NSMutableArray arrayWIthCapacity: 17];// count: 1, autoreleased// use the array 

上例中的arrayWithCapacity: 方法不属于alloc、new、copy中的任何一个,因此可以假设该对象被返回时保留计数器值为1而且已经被设置为自动释放。你不需要显示释放array。

垃圾回收(garbage collection)

Objective-C2.0引入了自动内存管理机制,也称垃圾回收。对于已经创建和使用的对象,当你忘记清理它们时,系统会自动识别哪些对象仍在使用,哪些对象可以回收。

垃圾回收是一种可选择启用的功能,启用方法是:在菜单选择Project | Edit Project Settings进入项目信息窗口,搜索“garb”,选择Required[-fobjc-gc-only]选项即可。如下图所示:

Cocoa内存管理规则与垃圾回收

“-fobjc-gc”选项是为了使代码即支持垃圾回收又支持对象的保留和释放。

启用垃圾回收后,通常的内存管理命令全部变成了空操作指令,不执行任何操作。

注意:如果开发iPhone软件,则不能使用垃圾回收。实际上,在编写iPhone程序时,苹果公司建议你不要在自己的代码中使用autorelease方法,同时还要避免使用创建自动释放对象的便利函数。

小结:Cocoa内存管理规则与垃圾回收的内容介绍完了,希望本文能对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2009-09-02 09:23:26

.NET内存管理机制

2014-12-19 11:07:40

Java

2023-12-19 21:52:51

Go垃圾回收开发

2024-02-04 09:18:00

Python内存管理垃圾回收

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2023-05-31 09:00:00

2010-09-26 16:42:04

JVM内存组成JVM垃圾回收

2023-02-28 07:56:07

V8内存管理

2017-02-21 16:40:16

Android垃圾回收内存泄露

2017-04-25 14:39:55

JVM内存Java

2011-07-28 11:12:25

Cocoa 内存

2013-10-11 17:32:18

Linux运维内存管理

2009-12-09 17:28:34

PHP垃圾回收机制

2011-07-26 15:14:24

苹果 Cocoa 内存

2019-06-24 19:00:09

JavaScript内存泄漏垃圾回收

2021-01-04 10:08:07

垃圾回收Java虚拟机

2022-01-20 10:34:49

JVM垃圾回收算法

2023-05-12 07:38:46

Python基准测试性能分析

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2011-07-07 09:54:01

Cocoa Core Foundation
点赞
收藏

51CTO技术栈公众号