面试-- 内存管理for (int i = 0; i < 1000000; ++i) {

什么时候需要手动创建自动释放池?

1、如果在循环中创建了大量的临时变量的时候需要在循环一开始就手动创建一个自动释放池

2、如果你生成一个子线程的时候,要在线程开始执行的时候,尽快创建一个自动释放池.否则会内存泄露.因为子线程无法访问主线程的自动释放池.

// 解读:这段代码有什么问题?
for (int i = 0; i < 1000000; ++i) {
    NSString *str = @"Hello World";
    str = [str stringByAppendingFormat:@" - %d", i];
    str = [str uppercaseString];
}

/*
问题:for循环里面创建了大量的临时变量存储在堆区,虽然变量每次都出for循环的作用域,但不会被销毁,因此会导致内存暴涨。
*/

// 解决:每一次循环都加个自动释放池,每次循环之后都释放临时变量。
    for (int i = 0; i < 100000000; ++i) {
        @autoreleasepool {
            NSString *str = @"Hello World";
            str = [str stringByAppendingFormat:@" - %d", i];
            str = [str uppercaseString];
        }
    }

// 注意:如果循环里面是基本数据类型,则不需要,它是系统自动管理的,出了作用域就释放,我们只需要考虑“对象”即可
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容