A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© pirate46 中级黑马   /  2015-2-5 16:49  /  587 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

property后面为什么要加nonatomic?

4 个回复

倒序浏览
多线程、高效率
回复 使用道具 举报

为什么要用多线程?什么是多线程 ?
回复 使用道具 举报
不知道。。
回复 使用道具 举报
本帖最后由 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
可以很明显的看出区别了吧!:):)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马