NSMutableArray上的@synchronized是否也对其元素采取同步效果?

时间:2014-10-20 08:33:06

标签: ios nsarray

如果@synchronized同步NSMutableArray,那么数组中的元素怎么样?他们也同步了吗?

例如,我通过@synchronized(数组)锁定数组以获取该数组中的元素,我可以确保我已经赢得的元素没有被更改(比如值的更改)我访问它时其他线程的元素的一些属性?

或者除了锁定数组之外,我还要再次锁定元素以防止其他人更改元素的属性?

由于

2 个答案:

答案 0 :(得分:1)

认为锁定是保护代码执行的手段而不是保护共享数据的方法要好得多。

@synchronized(可变数组){}块不保护任何数据,它只是确保多个线程不会同时执行同一个块。在括号内放置一个可变数组对象通常表示锁定的范围'。也就是说,"此锁定对象仅与此对象关联,并且#34;。

因此,使用@synchronized的最简单,最安全的方法是@synchronized (self)。在这种情况下,它清楚地说明了,#34;这个类一次只能由一个线程访问"。

  

如果@synchronized同步NSMutableArray,那么数组中的元素怎么样?他们也同步了吗?

答:没有

答案 1 :(得分:0)

不,它只会影响顶级字典访问,前提是所有其他代码路径遵循锁定数组的相同约定。

为了再次独占访问数组中的元素,您需要显式锁定它,并且所有其他代码路径都需要遵循此协议。