`
xinlanzero
  • 浏览: 252970 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

关于NSAutoreleasePool的release和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.

在一个garbage collected环境里,release不做任何操作。 NSAutoreleasePool因此提供了一个 drain 方法,它在reference-counted环境中的行为和调用release一样, 但是在一个garbage collected环境中则触发garbage collection动作 (if the memory allocated since the last collection is greater than the current threshold)。 因此通常你应该使用drain而不是release去释放一个autorelease pool。
分享到:
评论

相关推荐

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

    当`NSAutoreleasePool`被`drain`时,它会遍历这个数组,对其中的每个对象发送一个`release`消息,从而导致引用计数减一。 在主线程中,苹果的Application Kit框架会在事件循环的开始创建一个`NSAutoreleasePool`,...

    c-autoreleasepool:NSAutoreleasepool 为大家服务!

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

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

    //retain count = 1[NSAutoreleasePool drain]; //此时,如果没有其他 retain,obj1 将被释放,因为它被自动释放池标记为待释放的。在 iOS 应用程序中,每个事件循环(如触摸事件或定时器触发)都有一个自动释放池...

    详细讲述在采用引用计数的内存回收方式的工作原理[定义].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数据类型和运算符

    ### Objective-C 数据类型和运算符 #### 一、Objective-C 数据类型概述 Objective-C 是一种通用、面向对象的编程语言,它在 C 语言的基础上增加了面向对象的能力。Objective-C 主要用于开发 macOS 和 iOS 应用程序...

    objective C概述

    面对关于Objective-C和Cocoa是否已经过时的疑问,答案显然是否定的。Objective-C和Cocoa由一支才华横溢的团队精心打造,经历了多年的迭代和改进,已经演变成一套成熟且功能丰富的工具集,至今仍被广泛使用,尤其是在...

    iphone 相关文档

    [pool drain]; return 0; } ``` 恭喜,你已经创建了你的第一个Objective-C程序,它会打印出“你好,世界!”这句话。这个简单的程序展示了Objective-C的基本结构,包括程序入口点(main函数)、内存管理(使用...

    iPhone开发入门

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; } ``` - **自动释放池**: - `NSAutoreleasePool`...

    ios面试总结

    通常在线程开始时创建`NSAutoreleasePool`,在适当的时候(如任务完成后)进行drain,以释放自动释放的对象。 3. **线程与autoreleasepool** - 主线程默认有一个autorelease pool,但在自定义线程中,程序员需要...

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

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

    Translations: English|Chinese 开始吧 下载这篇教学 设定环境 前言 o编译 hello world

    Objective-C早期版本使用`retain`和`release`来进行手动内存管理。 ```objective-c id myObject = [[MyClass alloc] init]; [myObject retain]; // 增加引用计数 [myObject release]; // 减少引用计数 ``` ### ...

    Objective-C 培训教程

    - `NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];`:创建了一个自动释放池,用于管理内存释放。当程序结束时,通过调用`[pool drain]`方法,可以一次性释放所有在池中的对象。 - `NSLog(@...

    object-C内存管理

    自动引用计数是Objective-C的一个特性,它自动处理对象的`retain`和`release`。编译器在编译时根据语法规则插入合适的引用计数操作,开发者无需手动管理这些操作。这大大减少了内存泄漏的可能性,但开发者仍需理解...

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

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

    object-c内存管理与实例

    在非ARC环境下,程序员需要手动调用`retain`、`release`和`autorelease`方法来增加或减少对象的引用计数。 1. `retain`: 调用`retain`方法会增加对象的引用计数,通常在你获取到一个对象并希望保持对它的所有权时...

    Cocoa Developer documentation from Apple

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

Global site tag (gtag.js) - Google Analytics