刀哥多线程自动释放池autoreleasepool

自动释放池

作用

高级面试题:

常见面试题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”];}}}实际测试结果,是运行循环放在内部的速度更快!日常开发中,如果遇到局部代码内存峰值很高,,可以引入运行循环及时释放延迟释放对象

车到山前必有路,没路可以先开路,开路就得有乐观,

刀哥多线程自动释放池autoreleasepool

相关文章:

你感兴趣的文章:

标签云: