关闭

OC自动释放池在for循环中的性能测试

发表于:2015-6-19 13:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:alwaysDB    来源:51Testing软件测试网采编

  发现一个有意思的测试结果。
  @autoreleasepool 放在for 循环外面,即所有循环结束后才释放里面的延迟对象;而放在里面的话,也就是说每次循环都立即释放。
  这样就保证了for循环时不会突然内存爆表。
  但是,性能居然。。。。是放在里面的好点,附上代码,可以亲测玩玩。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"start");
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
[self test1];
NSLog(@"外 %f", CFAbsoluteTimeGetCurrent() - start);
start = CFAbsoluteTimeGetCurrent();
[self test2];
NSLog(@"内 %f", CFAbsoluteTimeGetCurrent() - start);
NSLog(@"over");
}
- (void)test2 {
for (long i = 0; i < largeNumber; ++i) {
@autoreleasepool {
NSString *str = [NSString stringWithFormat:@"hello - %ld", i];
str = [str uppercaseString];
str = [str stringByAppendingString:@" - world"];
}
}
}
- (void)test1 {
@autoreleasepool {
for (long i = 0; i < largeNumber; ++i) {
NSString *str = [NSString stringWithFormat:@"hello - %ld", i];
str = [str uppercaseString];
str = [str stringByAppendingString:@" - world"];
}
}
}
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号