码迷,mamicode.com
首页 > 其他好文 > 详细

step 5 autoreleasepool

时间:2016-01-01 21:04:24      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

自动释放池

  • 作用

                        自动释放对象的

                        所有 autorelease 的对象,在出了作用域之后,会被自动添加到最近创建的自动释放池中

                        自动释放池被销毁或者耗尽时,会向池中所有对象发送 release 消息,释放池中对象

                        自动释放池,在 ARC & MRC 程序中,同样有效

                         

1 自动释放池是什么时候创建的?什么时候销毁的?

2 创建,运行循环检测到事件并启动后,就会创建自动释放池

3 销毁:一次完整的运行循环结束之前,会被销毁

 

  •  

for (long i = 0; i < largeNumber; ++i) {

    NSString *str = [NSString stringWithFormat:@"hello - %ld", i];

    str = [str uppercaseString];

    str = [str stringByAppendingString:@" - world"];

}

  • 提问:以上代码是否有问题?如果有,如何解决?
  • 解决方法:引入自动释放池

?                     1> 外面加自动释放池(快):能够保证for循环结束后,内部产生的自动释放对象,都会被销毁 需要等到 for 结束后,才会释放内存

?                     2> 里面加自动释放池(慢):能够每一次 for 都释放产生的自动释放对象!

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

 

    NSLog(@"start");

    CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();

    [self answer1];

    NSLog(@"外 %f", CFAbsoluteTimeGetCurrent() - start);

 

    start = CFAbsoluteTimeGetCurrent();

    [self answer2];

    NSLog(@"内 %f", CFAbsoluteTimeGetCurrent() - start);

}

 

- (void)answer1 {

    @autoreleasepool {

        for (long i = 0; i < largeNumber; ++i) {

            NSString *str = [NSString stringWithFormat:@"hello - %ld", i];

            str = [str uppercaseString];

            str = [str stringByAppendingString:@" - world"];

        }

    }

}

 

- (void)answer2 {

    for (long i = 0; i < largeNumber; ++i) {

        @autoreleasepool {

            NSString *str = [NSString stringWithFormat:@"hello - %ld", i];

            str = [str uppercaseString];

            str = [str stringByAppendingString:@" - world"];

        }

    }

}

  • 实际测试结果,是运行循环放在内部的速度更快!

日常开发中,如果遇到局部代码内存峰值很高,可以引入运行循环及时释放延迟释放对象

step 5 autoreleasepool

标签:

原文地址:http://www.cnblogs.com/fakeCoder/p/5093731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!