Objective-C内存管理 实践准则

移动开发 iOS
本文介绍的是Objective-C内存管理 实践准则,本文建立在读者对Objective-C的内存管理已经有一定理解的基础上,我们先来看内容。

Objective-C内存管理 实践准则是本文要介绍的内容,这个系列打算写一些我对Iphone开发内存管理的理解。是建立在读者对Objective-C内存管理已经有一定理解的基础上,内容将包括实践准则,autorelease原理剖析,内存泄露的调试等。如果您对Objective-C内存管理不太了解,建议先读一下Vince Yuan的这个教程

在进行IPhone开发时,内存管理是个相对比较难以理解的东西。Objective-C 使用了一种介于C#C++之间的内存管理机制。C#是基于Mark-sweep的GC,C++基本上是程序员自己负责分配和释放。Ojbective-C,是程序员来负责Mark(通过Release,retain,alloc)计数, 系统来进行分配和释放。下面是一些准则,可以避免内存泄露和使用已释放的内存造成程序crash。

1、你必须为你自己创建的Object负责。包括alloc,newObject,mutableCopy 等,或者是你调用过retain的object。对于这些Object,你必须调用release 或autorelease。

2、对于其它函数返回的Object,你不能release它,原则上应该由被调用的函数来负责。e.g. NSString str = [NSString stringWithFormat:].  你自己写的函数也最好遵循这个准则,谁申请,谁释放,而不要让调用者来释放。

3、如果你要在某个对象的property里存储另外一个对象,你必须retain 或者copy 它,避免它被别人release。

@property(retain)。这里的retain关键字会自动做这个事情。如果你自己声明set方 法就要手动做这个事情。

4、关于IPhone内存管理的其它10个Tips。其中比较有用的包括尽量避免使用Autorelease,以及[UIImage imageNamed:],打开NSZombieEnabled.

5、weak reference. 如下图,Document 类中Page property 指向Page类的对象,page类中Parent property指向Document,这样如果互相之间的retain count都是1的话,那么这两个object永远不会被Dealloc。解决办法是把page.parent变为weak reference,也就是说,page.parent并不retain Document。 UITableView.datasource, notification observers, delegates, outline view items 等都是week reference。

Objective-C内存管理 实践准则

小结:Objective-C内存管理 实践准则的内容介绍完了,希望本文对有所帮助!

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

2010-07-20 08:49:00

Objective C

2011-05-11 15:45:50

内存管理Objective-C

2011-07-21 09:32:07

Objective-C 内存 Autoreleas

2011-07-20 17:04:43

Objective-C 内存 内存泄露

2011-07-18 17:14:16

Objective-C 内存 Cocoa

2011-08-16 17:43:47

Objective-C内存管理Autorelease

2011-08-01 11:37:41

iPhone Objective- 内存

2011-07-29 16:08:31

Objective-C 内存

2011-08-18 13:28:35

Objective-C内存

2011-07-19 15:15:09

Objective-C 内存

2011-07-21 09:42:27

Objective-C 内存 Autoreleas

2013-04-11 14:37:36

Objective-CiOS内存管理系统自动创建新的aut

2013-04-11 14:32:00

Objective-CiOS开发内存管理@synthesize

2011-07-28 18:11:18

Objective-C Cocoa 编程

2015-07-08 10:51:27

Objective-CRuntime

2011-07-22 15:42:39

Objective-C UIView 内存

2011-08-10 18:07:29

Objective-C反射

2011-05-11 11:20:26

Objective-C

2013-03-27 12:54:00

iOS开发Objective-C

2011-05-11 15:58:34

Objective-C
点赞
收藏

51CTO技术栈公众号