黑马程序员技术交流社区

标题: nonatomic [打印本页]

作者: pirate46    时间: 2015-2-5 16:49
标题: nonatomic
property后面为什么要加nonatomic?
作者: MacxChina    时间: 2015-2-5 22:54
多线程、高效率
作者: pirate46    时间: 2015-2-6 18:27
MacxChina 发表于 2015-2-5 22:54
多线程、高效率

为什么要用多线程?什么是多线程 ?
作者: 类自通    时间: 2015-2-6 18:53
不知道。。
作者: MacxChina    时间: 2015-2-6 19:07
本帖最后由 MacxChina 于 2015-2-6 19:10 编辑
pirate46 发表于 2015-2-6 18:27
为什么要用多线程?什么是多线程 ?

{:3_57:}{:3_57:}
nonatomic是非原子:就是说不在多线程的时候就用这个属性会提高效率!

目的是:为了防止同一变量被不同的线程在某一时间段同时访问,经常都是必须加原子锁来保证操作的正确性!
给线程加锁的话。消耗是比较大的。
如果不加nonatomic属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例
在属性声明的时候,当不会在多线程下操作此成员的时候声明为非原子性能极大的提高效率!!

给你举个例子:

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
可以很明显的看出区别了吧!:):)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2