1、swift的基本数据类型string、dictionary等都是struct类型,而oc的NSString、NSDictionary等都继承class。从内存管理方面来分析,struct是分配在栈,class一般都是分配在堆上。大家都知道栈的性能要比堆更好。
2、swift的数据类型都是在编译阶段就确定了,oc具有动态性,一般的数据类型和函数调用都是在运行时才确定。
结合oc和swift的demo来分析各自的性能。
swift的代码
var arr:[String] = []
override func viewDidLoad() {
super.viewDidLoad()
let startTime = CFAbsoluteTimeGetCurrent()
let testStr = String("一段测试代码,一万遍的循环")
for _ in 1...10000 {
arr.append(testStr)
}
let linkTime = (CFAbsoluteTimeGetCurrent() - startTime);
print("Linked in \(linkTime) ms")
}
控制台打印
**Linked in 0.025310993194580078 ms**
oc代码
self.arr = [[NSMutableArray alloc]init];
CFAbsoluteTime startTime =CFAbsoluteTimeGetCurrent();
NSString *testStr = [NSString stringWithFormat:@"%@",@"一段测试代码,一万遍的循环"];
for (int i = 0; i < 10000; i++) {
[self.arr addObject:testStr];
}
CFAbsoluteTime linkTime = (CFAbsoluteTimeGetCurrent() - startTime);
NSLog(@"Linked in %f ms", linkTime *1000.0);
控制台打印
Linked in 0.177026 ms
计算相同的数据量,性能上还是有很大差别的
网友评论