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

iPhone开发内存管理(转载)学习

阅读更多

基本概念

Object-C 的内存管理基于引用计数(Reference Count)这种非常常用的技术。简单讲,如果要使用一个对象,并希望确保在使用期间对象不被释放,需要通过函数调用来取得“所有权”,使用结束后再调用函数释放“所有权”。“所有权”的获得和释放,对应引用计数的增加和减少,为正数时代表对象还有引用,为零时代表可以释放。

函数

获得所有权的函数包括

alloc – 创建对象是调用alloc,为对象分配内存,对象引用计数加一。

copy – 拷贝一个对象,返回新对象,引用计数加一。

retain – 引用计数加一,获得对象的所有权。

另外,名字中带有alloc, copy, retain 字串的函数也都认为会为引用计数加一。

释放所有权的函数包括

release – 引用计数减一,释放所有权。如果引用计数减到零,对象会被释放。

autorelease – 在未来某个时机释放。下面具体解释。

autorelease

在某些情况下,并不想取得所有权,又不希望对象被释放。例如在一个函数中生成了一个新对象并返回,函数本身并不希望取得所有权,因为取得后再没有机会释放(除非创造出新的调用规则,而调用规则是一切混乱的开始),又不可能在函数内释放,可以借助autorelease 。所谓autorelease , 可以理解为把所有权交给一个外在的系统(这个系统实际上叫autorelease pool),由它来管理该对象的释放。通常认为交给 autorelease 的对象在当前event loop 中都是有效的。也可以自己创建NSAutoreleasePool 来控制autorelease的过程。

据苹果的人说,autorelease效率不高,所以能自己release的地方,尽量自己release,不要随便交给autorelease来处理。

 

规则

引用计数系统有自己的引用规则,遵守规则就可以少出错:

获得所有权的函数要和释放所有权的函数一一对应。

保证只有带alloc, copy, retain 字串的函数才会让调用者获得所有权,也就是引用计数加一

在对象的 dealloc函数中释放对象所拥有的实例变量。

永远不要直接调用dealloc来释放对象,完全依赖引用计数来完成对象的释放。

有很多类都提供“便利构造函数(convenience constructors)”,它们创建对象但并不增加引用计数,意味着不需要调用release来释放所有权。很好辨认,它们的名字中不会有alloc和copy。

 

容器

类似NSArray, NSDictionary, NSSet 等类,会在对象加入后引用计数加一获得所有权,在对象被移除或者整个容器对象被释放的时候释放容器内对象的所有权。类似的情况还有UIView对subview的所有权关系,UINavigationController对其栈上的controller的所有权关系等等。

 

其他所有权的产生

还有一些用法会让系统拥有对象的所有权。比如NSObject 的performSelector:withObject:afterDelay 。如果有必要,需要显示的调用cancelPreviousPerformRequestsWithTarget:selector:object: ,否则有可能产生内存泄露。

因这种原因产生的泄露因为并不违反任何规则,是Intrument所无法发现的。

 

循环引用

所有的引用计数系统,都存在循环应用的问题。例如下面的引用关系:

对象a创建并引用到了对象b.

对象b创建并引用到了对象c.

对象c创建并引用到了对象b.

循环引用而产生的内存泄露也是Instrument无法发现的,所以要特别小心。

分享到:
评论

相关推荐

    ios iphone开发-内存管理

    ios iphone开发-内存管理 所有权是iPhone内存管理的核心思想,对象的所有者负责在使用完对象后进行释放。一个对象可以有多个所有者,当它没有所有者时将被设置为取消分配(deallocation)

    iphone开发官方指南-内存管理编程指南

    ### iPhone开发官方指南:内存管理编程指南精要 #### 引言 在软件工程领域,尤其是在移动应用开发中,如iPhone应用开发,内存管理是一项核心技能。它关乎应用的性能、稳定性和用户体验。《iPhone开发官方指南:...

    IOS IPhone 内存管理

    IOS IPhone 内存管理 IOS IPhone 内存管理是指在 iPhone 和 Mac 中使用 Objective-C 语言管理内存的机制。该机制不同于 .Net/Java那种全自动的垃圾回收机制,而是基于 C 语言的手动管理方式,但添加了一些自动方法...

    iPhone内存管理

    ### iPhone内存管理:Objective-C中的深入解析 在iOS开发领域,内存管理是至关重要的技能之一。这不仅关乎应用的性能,还直接影响到用户体验。本文将深入探讨iPhone开发中Objective-C的内存管理技术,涵盖基本概念...

    如何学好Iphone开发

    对于学习iPhone游戏开发,掌握C/C++是非常有益的,尤其是指针和内存管理这部分。这是因为Objective-C虽然在语法上有面向对象的封装,但它本质上仍是C语言的衍生,保留了指针和内存管理等底层特性。因此,对于初学者...

    iPhone开发基础教程电子书

    这本书也写得非常好,里面非常系统地讲解了开发iphone和ipad上面的游戏需要注意的一些问题,比如内存很少的问题等。同时书里还涉及了cocos2d开发中大部分的内容,基本上可以说是所有的内容。同时,这本书的作者的...

    iPhone 内存管理

    在探讨iPhone内存管理的核心知识点时,我们主要关注的是Objective-C编程环境下如何有效地管理和优化iOS设备上的内存使用。尽管部分信息因版权原因无法详尽展示,但我们可以基于标题、描述、标签以及部分内容,深入...

    iPhone开发教程之iPhone内存释放注意事项两则--千锋培训

    ### iPhone开发教程之iPhone内存释放注意事项两则 #### 内存管理基础知识 在iOS开发过程中,内存管理是一项非常重要的任务。对于iOS应用来说,如果内存管理不当,可能会导致程序崩溃或者被系统强制关闭。在...

    iPhone开发实战.pdf

    通过学习iPhone应用开发,开发者可以构建各种类型的APP,包括但不限于游戏、社交、教育、娱乐等。 #### 1.2 开发环境搭建 - **Xcode**: Xcode是苹果官方提供的集成开发环境(IDE),用于开发iOS、macOS、watchOS和...

    iphone 开发学习基础NSDictionary

    object-c基础语法NSDictionary, 适合初学者,主要学习字典的操作,包括字典创建、长度、通过KEY找到value、获取所有key、获取所有value、以及可变字典的定义、可变字典添加值、可变字典的删除等

    iphone 开发学习基础char

    本学习资料着重于“iPhone开发学习基础Char”,旨在帮助初学者掌握字符操作的基础知识,这对于理解和编写iOS应用至关重要。Objective-C中的字符处理是编程过程中常见的任务,无论是处理用户输入还是与其他数据类型...

    iPhone开发基础教程-PDF版

    除此之外,你还会接触到iOS的生命周期管理,包括应用的启动过程、状态管理和内存管理。了解如何妥善处理后台任务和节能模式,确保应用在不同场景下都能正常运行。 在导航和数据存储方面,教程会讲解UITableView和...

    Iphone开发系列源码——Iphone主题源码

    Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码——Iphone主题源码Iphone开发系列源码...

    深入浅出iPhone开发

    总之,《深入浅出iPhone开发》是一本全面覆盖iPhone应用开发的教程,它不仅教授技术,更注重实践,让读者通过实例学习,从而真正掌握iOS开发的各个方面。无论是对Objective-C还是Swift感兴趣,这本书都能为初学者...

    iPhone 应用开发中Object-C 内存管理--千锋培训

    iPhone应用开发中的Object-C内存管理是开发者必须掌握的关键技能,特别是在资源有限的移动设备上,如iPhone OS(现称为iOS)。内存管理不当可能导致程序崩溃,严重影响用户体验。Object-C的内存管理基于引用计数机制...

    iPhone应用程序开发指南.pdf

    同时,对性能和内存管理的要求也很高,开发者必须确保应用程序能够高效运行,不会消耗过多的内存或电池。 iPhone应用开发指南还强调了开发过程中所需的各类文档和资料,包括API参考、编程指南以及各种开发工具和...

    iPhone3开发基础教程

    《iPhone3开发基础教程》是针对初学者的一本详尽指南,旨在引领读者探索iPhone SDK,深入了解iPhone和iPod touch编程。本书由Dave Mark与Jeff LaMarche共同编写,为第三版更新修订版,专为iOS开发新手设计,涵盖了...

    iPhone开发基础教程

    《iPhone开发基础教程》内容完整丰富,具有较强的通用性,编程领域中各层次读者都能通过《iPhone开发基础教程》快速学习iPhone开发,提高相关技能。iPhone 是一种全新的移动平台,苹果公司为它推出了强大的软件开发...

    轻松学iPhone开发

    《轻松学iPhone开发》这本书是为想要进入iOS应用开发领域的初学者精心编写的。它旨在以轻松易懂的方式,引导读者逐步了解并掌握...通过系统的理论学习与实践操作,你将能够掌握开发iPhone应用所需的关键技术和流程。

    iPhone开发环境搭建

    - **Xcode使用**:Xcode是iOS开发的主要工具,它提供代码编辑、项目管理、调试和模拟器功能。学习如何在Xcode中创建新的项目,编写Objective-C或Swift代码,以及如何使用模拟器或真实设备进行调试至关重要。 - **...

Global site tag (gtag.js) - Google Analytics