iPhone 加了这个线程后就出现了内存泄露!

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是默认的)。
 

posted on 2012-01-12 17:42  wtq  阅读(261)  评论(0编辑  收藏  举报