`
Jclick
  • 浏览: 189089 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

IOS内存管理

    博客分类:
  • IOS
 
阅读更多

   在ios5之前,是没有ARC的,所以内存靠自己手动回收或者使用autorelease.下面来介绍非ARC的情况,假定有两个指针a和b.

   1.关键字asign。针对的情况就是直接赋值,只针对基本类型,比如int float double short bool char long等。它只进行直接赋值,不进行引用计数,所以也不用管理内存。

    2.关键字retain。假定指针a指向了一块内存区域,我们又将b指向了这块内存,这时候我们假定指针a不再使用,我们是否可以释放掉这块内存?答案是很明显的。不能!因为b还 在使用这块内存,如果释放,就会crash掉。所以引入了引用计数功能。retain就是计数+1,当我们对属性设定了retain关键字时,alloc init就会对内存计数+1

     3.关键字release.release和第二条刚好相反,进行引用技术-1操作。当引用技术为0时,dealloc会被调用,内存被回收。如果指针a指向了两块内存,那么就应该调用两次release。

     4.关键字copy。copy的意思就是复制了两块内存。

     5.关键字atomic。此属性只支持同步操作,也就是线程安全的。

     6.关键字nonatomic。支持异步操作,非线程安全。

     7.关键字autorelease。如果a指向的对象是autorelease的,那么我们将不用对a进行release操作。当a不再使用时,a将进入NSAutoReleasePool. a的生命周期将会被延长,当pool drain的时候,a才会被销毁。应用启动的时候会初始化一个NSAutoReleasePool.在main函数里。

    8.NSAutoReleasePool介绍。

    

    初始化的方法为:NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init];

    释放的方法非release而是[subPool drain];

    以下英文摘自苹果官方文档。

In a garbage collected environment, release is a no-op. NSAutoreleasePool therefore provides a drain method that in a reference-counted environment behaves the same as calling release, but which in a garbage collected environment triggers garbage collection (if the memory allocated since the last collection is greater than the current threshold). Typically, therefore, you should use drain rather than release to dispose of an autorelease pool.


    使用场景:1.当我们使用autorelease管理的内存过大时,应自己初始化一个pool并执行回收,因为pool管理的内存回收的时间是不确定的。 2.当我们新起一个线程的时候,如果我们用到了autorelease,我们应当自己初始化一个pool,因为主线程是不管理新起线程的autorelease的。

 

分享到:
评论

相关推荐

    庄延军《iOS内存管理及优化》

    庄延军所著的《iOS内存管理及优化》是一本专注于iOS平台内存管理技巧与性能优化的书籍。它旨在帮助读者深入理解iOS内存管理机制,掌握内存优化方法,从而提升应用性能、稳定性和用户体验。 内存管理是移动应用开发...

    iOS内存管理1

    iOS内存管理1 iOS内存管理是iOS开发中非常重要的一部分,主要是为了避免内存泄露和循环引用。iOS内存管理有两种方式,一种是 Manual Reference Counting(MRC),一种是 Automatic Reference Counting(ARC)。 ...

    IOS内存管理与软件调试

    首先,我们来谈谈iOS内存管理。iOS系统采用自动引用计数(Automatic Reference Counting, ARC)作为主要的内存管理机制。ARC负责跟踪对象的所有者,并在适当的时候释放不再使用的内存。理解如何正确使用ARC至关重要...

    ios内存管理之深浅拷贝

    本文将深入探讨iOS内存管理中的一个重要概念——深浅拷贝,以及与其相关的`retain`、`copy`和`retainCount`。这些概念对于理解Objective-C中的内存管理机制至关重要。 首先,我们需要了解iOS内存管理的基本原则,即...

    iOS高级内存管理ARC模式手动模式英文文档含示例工程

    标题中的"iOS高级内存管理ARC模式手动模式英文文档含示例工程"表明,这个压缩包提供了深入探讨iOS内存管理的资源,包括了ARC和非ARC(即手动内存管理)的相关内容。这可能包括如何在ARC环境下处理特殊情况,以及何时...

    小议iOS内存管理-中文.pdf

    ### iOS内存管理核心知识点 #### 一、前言与背景 在探讨iOS内存管理之前,有必要理解为何这一主题如此重要。对于从C++或Java转向Objective-C(简称OC)的开发者来说,OC语言的特性显得既独特又挑战性十足。与Java...

    iOS内存管理方面的面试题汇总

    在iOS开发中,内存管理是...总之,理解并熟练掌握这些iOS内存管理的知识点,对于编写高效、稳定的应用至关重要。在面试中,能深入讨论这些问题,不仅体现了开发者的专业技能,也显示了其对程序性能优化的关注和重视。

    ios开发内存管理

    ios移动开发的内存管理ppt,讲的不错,你值得拥有

    iOS 内存管理机制 详细解读

    放入栈中。此区域的内存由编译器...了解并掌握内存管理是开发iOS应用的关键,合理的内存管理能确保应用的性能和稳定性。无论是手动的MRC还是自动的ARC,都需要开发者对内存管理有深入的理解,防止内存泄漏和意外崩溃。

    IOS高级内存管理编程指南.pdf

    本文将详细介绍iOS内存管理的知识点,包括内存管理的基本概念、策略、最佳实践和实战技巧,以及Autorelease池的使用等。 ### 1. 内存管理概述 内存管理是指在程序运行时对内存进行分配、使用和释放的过程。在...

    IOS内存管理Delegate与IOS下Speex语音压缩开发

    IOS的内存管理详解。 Delegate具体详解,使用流程。 Speex的语音压缩技术。 完整详细解读。40页,通俗简单,深入浅出,并有代码示例ppt。

    ios memory 内存管理

    ### iOS内存管理的核心概念 #### ARC (Automatic Reference Counting) ARC是苹果在iOS 5中引入的一项技术,用于自动管理对象的引用计数,从而避免了手动管理内存带来的复杂性和错误。通过ARC,编译器能够自动插入...

    UnityAndroid/iOS查看真机内存使用情况插件

    2. **Android和iOS内存管理**:Android和iOS操作系统都有自己的内存管理机制。Android使用Dalvik或ART虚拟机进行内存分配和回收,而iOS则依赖于Objective-C/Swift的自动引用计数(Automatic Reference Counting, ARC)...

    ios内存管理

    iOS开发有关object-c内存管理!

    详解关于iOS内存管理的规则思考

    iOS内存管理的核心在于引用计数(Reference Counting)机制,这是Objective-C中的基础概念。当对象的引用计数为0时,系统会自动回收该对象的内存。本文将深入探讨iOS内存管理的规则及其背后的思考。 1. **生成并...

    cz-add#iOS_maker#iOS 内存管理总结1

    3.未初始化数据:末初始化的全局变量、静态变量等 1.对字符串,字典,数组进行mutableCopy操作,属于深拷贝,并且会生成一个新的可变对象 2.对可变字符

    iOS内存管理中引用计数的学习

    本文主要讨论的是iOS内存管理中的引用计数机制,这是Objective-C和Swift(早期版本)中的一种自动内存管理策略。 引用计数是一种跟踪和管理对象生命周期的方法。简单来说,一个对象的引用计数表示了有多少个指针...

    iOS内存管理

    强引用、弱引用 weak和strong只有你打开ARC时才会被要求使用

Global site tag (gtag.js) - Google Analytics