测试机型:iPhone5s
一.测试kvc赋值与点语法的效率
- (void)testKVC
{
NSLog(@"kVCSet开始时间-->%@",[NSDate date]);
for(int i = 0;i < 10000000;i++)
{
MSSTestModel *testModel = [[MSSTestModel alloc]init];
[testModel setValue:@"MSS" forKey:@"testId"];
[testModel setValue:@"测试" forKey:@"title"];
[testModel setValue:@"添加一条消息" forKey:@"message"];
}
NSLog(@"kVCSet结束时间-->%@",[NSDate date]);
NSLog(@"点语法Set开始时间-->%@",[NSDate date]);
for(int i = 0;i < 10000000;i++)
{
MSSTestModel *testModel = [[MSSTestModel alloc]init];
testModel.testId = @"MSS";
testModel.title = @"测试";
testModel.message = @"添加一条消息";
}
NSLog(@"点语法Set结束时间-->%@",[NSDate date]);
MSSTestModel *testModel = [[MSSTestModel alloc]init];
testModel.testId = @"MSS";
testModel.title = @"测试";
testModel.message = @"添加一条消息";
NSLog(@"kVCGet开始时间-->%@",[NSDate date]);
for(int i = 0;i < 10000000;i++)
{
NSString *testId = [testModel valueForKey:@"testId"];
NSString *title = [testModel valueForKey:@"title"];
NSString *message = [testModel valueForKey:@"message"];
}
NSLog(@"kVCGet结束时间-->%@",[NSDate date]);
NSLog(@"点语法Get开始时间-->%@",[NSDate date]);
for(int i = 0;i < 10000000;i++)
{
NSString *testId = testModel.testId;
NSString *title = testModel.title;
NSString *message = testModel.message;
}
NSLog(@"点语法Get结束时间-->%@",[NSDate date]);
}
测试结果:
2015-11-28 14:44:35.741 性能测试[3982:1630572] kVCSet开始时间-->2015-11-28 06:44:35 +0000
2015-11-28 14:44:49.003 性能测试[3982:1630572] kVCSet结束时间-->2015-11-28 06:44:49 +0000
2015-11-28 14:44:49.004 性能测试[3982:1630572] 点语法Set开始时间-->2015-11-28 06:44:49 +0000
2015-11-28 14:44:52.648 性能测试[3982:1630572] 点语法Set结束时间-->2015-11-28 06:44:52 +0000
2015-11-28 14:44:52.648 性能测试[3982:1630572] kVCGet开始时间-->2015-11-28 06:44:52 +0000
2015-11-28 14:44:59.922 性能测试[3982:1630572] kVCGet结束时间-->2015-11-28 06:44:59 +0000
2015-11-28 14:44:59.923 性能测试[3982:1630572] 点语法Get开始时间-->2015-11-28 06:44:59 +0000
2015-11-28 14:45:01.260 性能测试[3982:1630572] 点语法Get结束时间-->2015-11-28 06:45:01 +0000
二.测试直接用实例变量和点语法调用效率
- (void)testIvar
{
_test = @"测试";
_testTitle = @"AAAA";
_message = @"测试直接用实例变量和点语法调用速度";
NSLog(@"实例变量开始时间-->%@",[NSDate date]);
int i = 0;
for(i = 0;i < 50000000;i++)
{
NSString *s1 = _test;
NSString *s2 = _testTitle;
NSString *s3 = _message;
}
NSLog(@"实例变量结束时间-->%@",[NSDate date]);
NSLog(@"点语法开始时间-->%@",[NSDate date]);
for(i = 0;i < 50000000;i++)
{
NSString *s1 = self.test;
NSString *s2 = self.testTitle;
NSString *s3 = self.message;
}
NSLog(@"点语法结束时间-->%@",[NSDate date]);
}
测试结果:
2015-11-28 14:48:09.574 性能测试[3993:1631480] 实例变量开始时间-->2015-11-28 06:48:09 +0000
2015-11-28 14:48:13.801 性能测试[3993:1631480] 实例变量结束时间-->2015-11-28 06:48:13 +0000
2015-11-28 14:48:13.801 性能测试[3993:1631480] 点语法开始时间-->2015-11-28 06:48:13 +0000
2015-11-28 14:48:20.902 性能测试[3993:1631480] 点语法结束时间-->2015-11-28 06:48:20 +0000
结论:点语法效率比KVC高,实例变量比点语法效率高