autoreleasepool

@autoreleasepool{}

ARC模式下:

1.[p autorelease]; 只会将p放入pool中,不会立即release(即 retain - 1),延迟至pool销毁时。

2.在pool销毁时,其中的所有对象都将进行release。

3.若开辟多线程时(如:[self performSelectorInBackground:@selector(setupLocalContactsData:) withObject:success]),

要在setupLocalContactsData:中加入autoreleasepool进行内存管理。

EX:

  if (version < 6.0) {
            _addressBookRef = ABAddressBookCreate();
            [self performSelectorInBackground:@selector(setupLocalContactsData:) withObject:success];//新建后台线程执行
         
        }

- (void)setupLocalContactsData:(void (^)(NSArray *localContacts))success
{
    @autoreleasepool { //对新线程做内存管理
        
        NSMutableDictionary *pinyinDictionary = nil;
        NSMutableArray *resultArray = [NSMutableArray array];
        
        CFArrayRef allPeopleArrayRef = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(_addressBookRef, nil, kABPersonSortByLastName);

    }

}

时间: 2024-10-12 12:21:52

autoreleasepool的相关文章

step 5 autoreleasepool

自动释放池 作用 自动释放对象的 所有 autorelease 的对象,在出了作用域之后,会被自动添加到最近创建的自动释放池中 自动释放池被销毁或者耗尽时,会向池中所有对象发送 release 消息,释放池中对象 自动释放池,在 ARC & MRC 程序中,同样有效 1 自动释放池是什么时候创建的?什么时候销毁的? 2 创建,运行循环检测到事件并启动后,就会创建自动释放池 3 销毁:一次完整的运行循环结束之前,会被销毁 for (long i = 0; i < largeNumber; ++

cocos2D-x 3.5 引擎解析之--引用计数(Ref),自己主动释放池(PoolManager),自己主动释放池管理器( AutoreleasePool)

#include <CCRef.h> Ref is used for reference count manangement. If a classinherits from Ref. Class Ref 为引用计数类,用来管理对象的引用计数. 这样就不会出现还有指针保持指向该对象,当使用该指针操作时,假设指向的对象被销毁就会出现程序异常. class CC_DLL Ref { public: void retain();//添加引用计数一次 void release();//降低引用计数一次

YYKit @autoreleasepool 使用,优化内存

写在前面 最近再看YY大神的YYKit工具,发现在代码中经常使用@autoreleasepool,特别是在与for循环搭配使用的时候.刚开始很不能理解. 之前对iOS的ARC的理解就是自己创建的对象,会在该对象所在是代码快(当前作用域)结束时候自动释放.无需程序员自己管理.但是如果仔细研究YYKit的代码的话,发现如果注释掉@autoreleasepool,程序一样可以正常运行,但是观察当前内存,会比在加上该句代码时候占用比更大的空间.所以自己百度了一下,这里是sunny(百度一90后iOS程序

Cocos2d-x 3.x:如何进行合理的内存分配(使用AutoreleasePool 来合理的管理内存)

Cocos2d-x 3.x:如何进行合理的内存分配(使用AutoreleasePool 来合理的管理内存) 本文转载至深入理解Cocos2d-x 3.x:如何进行合理的内存分配 设想如下场景,这是一个典型的内存合理分配的场景:在一帧内,有若干个函数,每个函数都会创建一系列的精灵,每个精灵都不同,都会占用一定的内存,精灵的总数可能会有1000个,而一个函数只会创建10个精灵这样,创建的精灵只会在这个函数中使用,大致代码如下: 1 2 3 4 5 for(int i = 0; i < 10; i++

iOS基本内存管理:autorelease和autoreleasepool

1.autorelease 基本用法 对象执行autorelease方法时会将对象添加到自动释放池中 当自动释放池销毁时自动释放池中所有对象作release操作 对象执行autorelease方法后自身引用计数器不会改变,而且会返回对象本身 2.autorelease 的优点 autorelease实际上只是把对release的调用延迟了,对于每一次autorelease系统只是把该对象放入了当前的autorelease pool中,当该pool被释放时,该pool中的所有对象会被调用Relea

刀哥多线程自动释放池autoreleasepool

自动释放池 作用 自动释放对象的 所有 autorelease 的对象,在出了作用域之后,会被自动添加到最近创建的自动释放池中 自动释放池被销毁或者耗尽时,会向池中所有对象发送 release 消息,释放池中对象 自动释放池,在 ARC & MRC 程序中,同样有效 高级面试题: 自动释放池是什么时候创建的?什么时候销毁的? 创建,运行循环检测到事件并启动后,就会创建自动释放池 销毁:一次完整的运行循环结束之前,会被销毁 常见面试题 for (long i = 0; i < largeNum

cocos2D-x 3.5 引擎解析之--引用计数(Ref),自动释放池(PoolManager),自动释放池管理器( AutoreleasePool)

#include <CCRef.h> Ref is used for reference count manangement. If a classinherits from Ref. Class Ref 为引用计数类,用来管理对象的引用计数.这样就不会出现还有指针保持指向该对象,当使用该指针操作时,如果指向的对象被销毁就会出现程序异常. class CC_DLL Ref { public: void retain();//增加引用计数一次 void release();//减少引用计数一次,

@autoreleasepool {}在ARC下还能用

1.ARC下用 @autoreleasepool {}主要还是为了避免内存峰值.简单点的说在{}中存放的对象会在稍后的某个时刻释放掉 (1)在自动释放池@autoreleasepool{}中alloc一个对象后(如p1),仍然需要用[p1 autorelease];只是这个语句和[p1 release];不同,后者表示把p1的retainCount-1,而前者仅仅表示把p1放到自动释放池中返回一个self,自动释放池结束销毁时,统一对里面的对象引用计数retainCount-1. (2)@aut

@autoreleasepool在ARC和MRC下的区别

MRC这个词应该是我编的,ARC,Automatic Reference Counting,手工引用计数就应该是:Manual Reference Counting,那就应该是MRC喽,不过没有见人这样用过. ARC引入了新的语句管理自动释放池语法: @autoreleasepool {     // Code, such as a loop that creates a large number of temporary objects.} 测试了一下,在ARC情况下和MRC情况下对象的释放有