0
点赞
收藏
分享

微信扫一扫

NSAutoreleasePool与内存管理

伊人幽梦 2022-04-13 阅读 17
objective-c

大数据处理,如高清图片的加载等,在加载过程中往往需要对加载过程中创建的内存对象进行回收利用:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableArray *mArray = [[NSMutableArray  alloc] init];
for (int index = 0; index < 10000; index++) {
    //栈内存,函数结束时释放(此时retainCount==-1)
    NSString *str = @"根据index在数据库获取的字符串或其它"
    //如果str为栈内存(retainCount == -1),就拷贝了一份,如果str为堆内存,就做retain操作
    [mArray addObject:str];
    if (index % 1000 == 0) {
        [pool release];
        pool = [[NSAutoreleasePool alloc] init];
    }
    [str autorelease];
}
[pool release];//在arc下则用 drain;

另外:
每一个runloop,系统会隐式创建一个autorelease pool,每个runloop结束时,对应autorelease pool会销毁,销毁时pool中每个object都会release一次。
一次事件就产生一个runloop,如一次鼠标点击,键盘点击,一次触摸,一次异步http连接并接收完数据等
也可以自己创建autorelease pool,比如在一个循环中用到了太多的临时变量,在整个循环结束(或每一次循环结束)后想让其自动release.

举报

相关推荐

JVM内存分配与管理详解

0 条评论