`

NSAutoReleasePool使用中drain和release的区别

 
阅读更多

 

虽然ARC引入之后NSAutoReleasePool的使用有了很大变化,但是了解NSAutoReleasePool的机制还是十分必要的,下面主要说一下:

NSAutoReleasePool * pool = [NSAutoReleasePool alloc] init];

//do something

之后,

[pool drain] 和 [pool release] 的区别:

release,在引用计数环境下,由于NSAutoReleasePool是一个不可以被retain的类型,所以release会直接dealloc pool对象。当pool被dealloc的时候,pool向所有在pool中的对象发出一个release的消息,如果一个对象在这个pool中autorelease了多次,pool对这个对象的每一次autorelease都会release。在GC环境下release是一个no-op操作(代表没有操作,是一个占据进行很少的空间但是指出没有操作的计算机指令)。

drain,在引用计数环境下,它的行为和release是一样的。在GC的环境下,这个方法调用objc_collect_if_needed出发GC。

因此,重点是:在GC环境下,release是一个no-op,所以除非你不希望在GC环境下出发GC,你都应该使用drain而不是使用release来释放pool。

分享到:
评论

相关推荐

    有时侯我们需要延迟一个对象的引用计算减一操作

    总的来说,`autorelease`机制和`NSAutoreleasePool`是Objective-C内存管理中的重要组成部分,它们协同工作以确保对象在合适的时间被释放,同时避免内存泄漏。理解并正确使用这些概念对于编写高效、稳定的iOS应用至关...

    c-autoreleasepool:NSAutoreleasepool 为大家服务!

    尝试将 NSAutoreleasepool(或 @autoreleasepool{...})从 Objective-C 和 Cocoa 中完全用 C 实现到 C 语言中。 我认为这对某人有用并在周末左右实施。 我还没有找到任何可比较的项目,但如果你有更好的项目,请告诉...

    iPhone Mac Objective-C内存管理教程和原理剖析

    8. @autoreleasepool:在 ARC 中,使用 @autoreleasepool 替代了手动创建和管理 NSAutoreleasePool。这使得在代码块内部创建的对象会在块结束时自动释放。```objc@autoreleasepool { ClassA *obj1 = [[ClassA alloc]...

    详细讲述在采用引用计数的内存回收方式的工作原理[定义].pdf

    引用计数是一种常见的...总之,引用计数、`alloc`、`release`、`retain`、`autorelease`以及`NSAutoreleasePool`是Objective-C内存管理的关键组成部分,理解并正确使用这些概念对于避免内存泄漏和程序崩溃至关重要。

    Objective-C的另类教程

    [releasePool drain]; } ``` NSOperation和NSInvocationOperation是更高级的多线程工具,它们提供了更好的任务管理和并发控制。NSOperationQueue可以管理多个NSOperation实例,允许你设置依赖关系、限制并发数量等...

    Objective-C培训资料

    ARC 自动管理对象的引用计数,开发者不再需要手动发送 `retain` 和 `release` 消息来增加或减少对象的引用计数。 #### 五、对象的初始化 Objective-C 中的对象可以通过多种方式初始化,最常见的是使用 `-init` 方法...

    Objective-C培训资料(修改版).pdf

    - 使用alloc、retain、copy和release来进行内存操作。 - 使用自动释放池管理临时对象。 9. 类的定义和实现: - 类的定义由@interface和@end包围。 - 类的实现由@implementation和@end包围。 - 在实现部分完成...

    ios面试总结

    - 在非主线程中使用`autorelease`时,必须创建并管理自己的`NSAutoreleasePool`,以避免内存泄漏或异常。通常在线程开始时创建`NSAutoreleasePool`,在适当的时候(如任务完成后)进行drain,以释放自动释放的对象...

    Objective-C-2.0程序设计-第16章-使用文件PPT课件.ppt

    Objective-C 2.0程序设计中的第16章主要探讨了如何在iOS和macOS开发中使用文件。这一章的核心内容围绕着`NSFileManager`类和`NSPathUtilities`的相关功能展开,它们是Objective-C中处理文件和目录的主要工具。 首先...

    Objective-C培训教程

    在早期的Objective-C版本中,开发者需要手动管理内存,利用retain和release方法来增加或减少对象的引用计数。而在现代的Objective-C版本中,引入了自动引用计数(ARC)机制,简化了内存管理过程。 第五章对象的初始...

    收集百度、阿里等100家企业面试题合集下.pdf

    - 文档中列出了一些可能的面试题目,这些题目往往覆盖了iOS开发的基础知识,例如内存管理、视图的使用和管理、框架的使用等,以及底层原理和进阶概念。 - 面试题目也可能会涉及到对最新技术的了解,比如Swift语言...

    Objective-C 培训教程

    - **布尔类型**:Objective-C中使用`BOOL`类型来表示逻辑值,`YES`和`NO`分别代表真和假,与C++不同,C++中的任何非零值都被视为真。 - **基础代码结构**:典型的Objective-C程序包括导入必要的框架、声明和初始化...

    objective C概述

    Objective-C和Cocoa由一支才华横溢的团队精心打造,经历了多年的迭代和改进,已经演变成一套成熟且功能丰富的工具集,至今仍被广泛使用,尤其是在iOS和macOS的开发中,保持着强大的生命力和市场前景。 #### 语言...

    object-c内存管理与实例

    - 强引用(Strong Reference)与弱引用(Weak Reference):在ARC中,可以使用`strong`和`weak`关键字来声明变量。`strong`是默认的,表示强引用;`weak`表示弱引用,不增加对象的引用计数,当对象被其他强引用全部...

    OC中的内存管理

    此外,OC还提供了一些其他工具和策略来优化内存管理,例如`NSAutoreleasePool`,它允许在特定范围内自动释放不再使用的对象,这对于临时对象的管理非常有用,特别是在多线程环境中。还有`NSZone`,它提供了一种内存...

    object-C内存管理

    本练习主要关注如何有效地使用和理解这个机制,以及ARC(Automatic Reference Counting)的引入,它是Objective-C 2.0中的一个重要改进。 1. 引用计数: 在Objective-C中,每个对象都有一个引用计数,表示指向该...

    iphone 相关文档

    `argc`和`argv`参数分别表示命令行参数的数量和数组,但在这个简单的程序中我们不需要它们。`NSAutoreleasePool`用于管理内存,防止内存泄漏,而`NSLog`函数则用于向控制台输出信息。 在后续的教程中,我们将逐步...

    Cocoa Developer documentation from Apple

    这部分内容会指导开发者正确使用retain、release、autorelease等方法,以及如何利用NSZone和NSAutoreleasePool进行优化。 04-Lecture.pdf和05-ResourcesPanels.pdf可能涉及到资源管理和面板的使用,这包括加载图像...

    Foundation框架简介PPT学习教案.pptx

    例如,它支持日期和时间的处理(NSDate),内存管理(NSAutoreleasePool, NSObject的retain和release方法),文件系统操作(NSFileManager,NSPathUtilities),对象的序列化与反序列化(NSCoding协议),以及处理...

Global site tag (gtag.js) - Google Analytics