`
webcode
  • 浏览: 6065909 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Objective-C内存管理~~

 
阅读更多

原文链接:http://blog.csdn.net/dboylx/archive/2009/02/13/3888746.aspx

在使用Objective-C的工作中内存管理是首先要学会的一项技能,是如此重要。下面就来聊聊Apple官网上的内存管理的事情。

Objective-C的对象内存管理是一件非常有意思的事情,由其是在iPhone嵌入式设备中.

想玩的省心点,就得熟知它的管理规则,由其是内存的管理机制。了解它的品性了才能在Cocoa的世界里如鱼得水。否则,反之(如水得鱼!!^_^)。

首先,要牢记Apple的官网上的内存管理三定律:

1,一个对象可以有一个多个拥有者

2,当它一个拥有者都没有时,它就会被回收

3,如果想保留一个对象不被回收,你就必需成为它的拥有者(ownership)


所有内存管理的原则全在这里!!

简单??哈哈!

名人曰:“大道至简”

这儿玩意儿说起来比过家家还容易,但其实有些事情真正做起来并不是简单的事儿~~

咱们首先来说怎么样才能成为一个对象的拥有者。Cocoa提供了一个机制叫"reference counting",翻译过来就是“关联记数器”(自己翻译的,真不知叫啥,如果有官方的翻译请通知我)。每一个对象都有一个关联记数的值。当它被创建 时,它的值为“1”。当值减少到“0”时,就会被回收(调用它的deallocate方法,如果没有写,则调用从NSObject继承而来的回收方法,下 文有说,一定要重写该方法)。 以下几个方法可以操作这个记数:

1,alloc
为对象分配内存,记数设为“1”,并返回此对象。

2,copy
复制一个对象,此对象记数为“1”,返回此对象。你将成为此克隆对象的拥有者

3,retain
对象“关联记数”加“1”,并成为此对象的拥有者。

4,release
对象“关联记数”减“1”,并丢掉此对象。

5,autorelease

在未来的某一时刻,对象“关联记数”减“1”。并在未来的某个时间放弃此对象。

有了上面的几个方法(当然这也是所有的内存操作的方法,简单吧,哈哈哈)你就可以随意操作一个对象的记数。并部分或完全的控制它的生命周期。但实际 应用中,随意乱写上面的任何一个方法都可能会带来严重的内存泄露。混乱的内存分配等于没完没了的麻烦工作,你不想在情人节的日子还在为记数之类的鸟问题而丢了老婆吧~~哈哈哈,为了美丽温柔贤惠又善解人意的准老婆请牢记以下四条:

1,一个代码块内要确保copy, alloc 和 retain 的使用数量与 release 和 autorelease 的数量相同。

2,在使用以“alloc”或“new”开头或包含“copy”的方法,或“retain”一个对象时,你就会变为它的拥有者。

3,实现“dealloc”方法,并施放所有的实例变量。(其实这里还有很多的巧儿门!!)

4,永不自己调用“dealloc”方法,这是系统当“retain”减到“0”时,自动调用的。手动调用会引起retain count记数错误(多一次的release)。

其实做到这些也不难,

retain count 增加与减少的方法对应,板丁板做到了就行了。

翻译自:
http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447

分享到:
评论
Global site tag (gtag.js) - Google Analytics