`

NSAutoreleasePool解说

    博客分类:
  • ios
阅读更多
   当一个对象调用autorelease时,会将此对象放到最近的一个NSAutoreleasePool实例中,当自动释放池发送drain时会遍历释放池中的autorelease对象,把每个对象都release掉。
   对于每一个Runloop, 系统会隐式创建一个Autorelease pool, 这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object会被release。一个UI event,Timer call, delegate call, 都会是一个新的Runloop
  1.在主线程中每个event loop开始的时候会创建一个autorelease pool,在循环结束时清空自动释放池。
  2.每个子线程都维护着对应的NSAutoreleasePool对象,当子线程结束时会清空对应的自动释放池。
  3.如果局部代码有很多autorelease对象,此时应该自己新建一个自动释放池来管理,如:
    for (int i=0; i<largeNumber; i++) {
        NSString *str=@"ssss";
        str=[str lowercaseString];
        str=[str stringByAppendingString:@"aaa"];
    }
当这个largeNumber很大时就要自己新建一个自动释放池。
分享到:
评论

相关推荐

    c-autoreleasepool:NSAutoreleasepool 为大家服务!

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

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

    在本文中,我们将深入探讨一种特定的内存管理技术,即`autorelease`机制,以及它如何与`NSAutoreleasePool`相关联。 标题所提到的“有时侯我们需要延迟一个对象的引用计算减一操作”,指的是在某些情况下,我们不...

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

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; ClassA *obj = [[[ClassA alloc] init] autorelease]; // 使用 obj [pool release]; // 在这里,obj的引用计数减1,如果为0,则对象被释放 ``` 工厂...

    ios面试总结

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

    Objective-C数据类型和运算符

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; int integerVar = 100; NSLog(@"integerVar=%i", integerVar); [pool drain]; return 0; } ``` **整型变量混用示例**: ```objective-c ...

    iphone 相关文档

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; // insert code here... NSLog(@"你好,世界!"); [pool drain]; return 0; } ``` 恭喜,你已经创建了你的第一个Objective-C程序,它会打印出...

    iPhone开发入门

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

    Objective-C培训资料

    - **创建**: `NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];` 创建一个自动释放池,用于管理自动释放的对象。 - **释放**: `[pool drain];` 释放自动释放池及其所有对象。 #### 二、数据类型 ...

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

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *fName = @”testfile”; // 假设存在的文件名 NSFileManager *fm = [NSFileManager defaultManager]; NSDictionary *attr; if ([fm ...

    objective C概述

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Hello, world!"); [pool drain]; return 0; } ``` 这段代码首先导入了Foundation框架,这是Objective-C中处理基本数据类型和常用...

    Objective-C的另类教程

    NSAutoreleasePool *releasePool = [[NSAutoreleasePool alloc] init]; // 执行你的任务... [releasePool drain]; } ``` NSOperation和NSInvocationOperation是更高级的多线程工具,它们提供了更好的任务管理和...

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

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; ``` 在程序执行过程中,Xcode通常会在`main`函数中自动创建一个自动释放池。该池在运行结束时会自动销毁所有`autorelease`对象,但仅调用`release`...

    ios类库以及foundation框架

    4. NSAutoreleasePool类:在自动引用计数(ARC)出现之前,NSAutoreleasePool类用于管理内存,帮助自动释放那些不再需要的对象。它会创建一个自动释放池,并在适当的时候释放池中的对象,以避免内存泄漏。虽然ARC...

    2015年上半年的iOS面试及笔试集锦

    NSAutoreleasePool用于临时存储并适时释放那些被autorelease的对象,特别是在循环或并发环境中。 面试题.zip可能会涵盖更广泛的iOS面试问题,除了内存管理,还可能包括: 4. KVO(Key-Value Observing)和KVC(Key...

    Block循环引用的问题

    4. 使用NSStackBlock和NSAutoreleasePool:对于那些生命周期短暂的Block,可以在Block内部创建一个NSAutoreleasePool,然后将Block从栈复制到池中,当池被释放时,Block也会随之释放,从而避免循环引用。 在实践中...

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

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

    object-C内存管理

    在非ARC环境中,`NSAutoreleasePool`用于管理autorelease对象。在iOS应用的每个RunLoop周期中,都会有一个自动释放池,它会在周期结束时释放所有autoreleased对象。 7. `deinit`: 对象销毁时调用的析构方法,...

Global site tag (gtag.js) - Google Analytics