1:原文摘自:http://www.cocoachina.com/bbs/read.php?tid=42551

 

 

我在子线程调用的 doOtherFunc  函数里对很多属性有赋值操作,这些属性都是定义成@property (nonatomic,retain)的,我看别的帖子里有说   "nonatomic   多线程相关~没有多线程可以写这个提高效率"   ,那我现在是有多线程了吧?就不能提高效率了吗?定义成nonatomic的属性和多线程的关系不是太明白,哪位高人给解释解释呗!多谢! 

 

我们定义的属性默认是atomic,它的意思是在访问这些属性以前要加上一个lock的操作,在访问完以后加上unlock的操作,以免在不同的线程里同时访问造成的一些未知问题。
如果不加上这个的话,比如说,两个子线程同时运行,而你在第一个线程里把某个对象的值修改了或者把这个对象release掉了,第二个线程可能就拿到一个错误的值,或者因为对象正在使用却被第一个线程relase掉导致程序crash。
而这个lock和unlock会造成一定的系统消耗,在此,如果我们确定我们不会在不同的线程里同时使用到的属性,就可以定义成nonatomic,以减少系统消耗,如果可能会在不同线程中访问,那么就使用atomic,或者什么都不写(因为atomic是默认的)。
 

相关文章:

  • 2021-10-22
  • 2021-10-03
  • 2021-11-28
  • 2021-07-30
  • 2022-12-23
猜你喜欢
  • 2021-06-27
  • 2022-12-23
  • 2022-12-23
  • 2021-08-21
  • 2022-02-21
  • 2022-12-23
相关资源
相似解决方案