IOS中 @property (nonatomic,assin)声明里 nonatomic的作用
2014-01-01 19:59
369 查看
为了防止同一变量被不同的线程在某一时间段同时访问,必须加原子琐来保证某次操作的正确性。关于操作的原子性,我看过大神guancheng的一篇http://www.parallellabs.com/2011/04/09/pthread-mutex-lock-and-thread-safety/ ,这篇文简单的介绍下原子操作。
给线程加锁的消耗是比较大的,而我们在IOS中不是经常会多个线程访问一个同一个变量,为了提高效率,我们通常会在属性中这样声明:
@property (nonatomic,copy)NSString *userName;
有同学可能非常疑惑,这样做到底能提高多少效率呢?不这样做又怎样?好,下面我们来写个Demo。
1.首先我使用上面的声明的userName的声明
运行下结果是:
2012-07-12 19:57:59.679 NavigationDemo[635:f803] end - begin = 1236
2.然后我使用下面的声明
运行的结果是:
NavigationDemo[726:f803] end - begin = 8330
3.可以明显看出声明为nonatomic能提高好几倍的效率,所以在属性声明的时候,当不会在多线程下操作此成员的时候声明为非原子性能极大的提高效率,希望看完这篇文后更多的同学能使用这个声明。
给线程加锁的消耗是比较大的,而我们在IOS中不是经常会多个线程访问一个同一个变量,为了提高效率,我们通常会在属性中这样声明:
@property (nonatomic,copy)NSString *userName;
有同学可能非常疑惑,这样做到底能提高多少效率呢?不这样做又怎样?好,下面我们来写个Demo。
1.首先我使用上面的声明的userName的声明
@property (nonatomic,copy)NSString *userName; - (void)viewDidLoad { uint64_t begin = mach_absolute_time(); self.userName = @"username"; uint64_t end = mach_absolute_time(); NSLog(@"end - begin = %llu",end-begin); }
运行下结果是:
2012-07-12 19:57:59.679 NavigationDemo[635:f803] end - begin = 1236
2.然后我使用下面的声明
@property (atomic,copy)NSString *userName; - (void)viewDidLoad { uint64_t begin = mach_absolute_time(); self.userName = @"username"; uint64_t end = mach_absolute_time(); NSLog(@"end - begin = %llu",end-begin); }
运行的结果是:
NavigationDemo[726:f803] end - begin = 8330
3.可以明显看出声明为nonatomic能提高好几倍的效率,所以在属性声明的时候,当不会在多线程下操作此成员的时候声明为非原子性能极大的提高效率,希望看完这篇文后更多的同学能使用这个声明。
相关文章推荐
- Objective-C 中 @property (nonatomic,copy)声明里 nonatomic的作用
- IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dyna
- IOS,objective_C中用@interface和 @property 方式声明变量的区别
- IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dyna
- IOS,objective_C中用@interface和 @property 方式声明变量的区别
- IOS解惑(1)之@property(nonatomic,getter=isOn) BOOL on;中的getter解惑
- iOS,@property,@synthesize, nonatomic,atomic,strong,weak,copy,assign,retain解析
- IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dyna
- IOS,objective_C中用@interface和 @property 方式声明变量的区别
- 【iOS知识学习】_关键字self,super,copy, retain, readonly , readwrite, nonatomic、@synthesize、@property
- IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dyna
- IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dyna
- IOS解惑(1)之@property(nonatomic,getter=isOn) BOOL on;中的getter解惑
- iOS 内存管理-copy、 retain、 assign 、readonly 、 readwrite、nonatomic、@property、@synthesize、@dynamic、IB_DESIGNABLE 、 IBInspectable、IBOutletCollection
- IOS,objective_C中用@interface和 @property 方式声明变量的区别
- IOS,objective_C中用@interface和 @property 方式声明变量的区别
- nonatomic atomic 属性声明的作用(以 附带 retain关键字举例)iOS开发
- iOS @property各个参数的作用
- 关于IOS中变量声明方式@interface和@property的区别
- IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dyna