原子属性和使用互斥锁实现的属性的性能对比
代码:
#import "ViewController.h" extern uint64_t dispatch_benchmark(size_t count, void (^block)(void)); @interface ViewController () // 原子属性 - 互斥锁实现 @property (strong, nonatomic) NSObject *obj1; // 原子属性 - 自旋锁实现 @property (strong, atomic) NSObject *obj2; @end @implementation ViewController - (void)touchesBegan:(nonnull NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event { size_t count = 1000000; // 性能测试 - 模拟原子属性 uint64_t time1 = dispatch_benchmark(count, ^{ self.obj1 = [[NSObject alloc] init]; }); NSLog(@"模拟的原子属性 = %llu ns", time1); // 性能测试 - 原子属性 uint64_t time2 = dispatch_benchmark(count, ^{ self.obj2 = [[NSObject alloc] init]; }); NSLog(@"原子属性 = %llu ns", time2); } // 重写set方法 - (void)setObj1:(NSObject *)obj1 { // 使用互斥锁模拟原子属性 @synchronized(self) { _obj1 = obj1; } } @end
输出:
模拟的原子属性 = 345 ns 原子属性 = 192 ns
总结:
原子属性比使用互斥锁实现的属性性能更好。
豪情壮志铁傲骨,原来英雄是孤独。