KVC和点语法的性能

测试机型: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高,实例变量比点语法效率高


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值