2016-01-14 35 views
0

我需要为线程安全性创建一个带有atomic属性的变量,并在类变量中访问它。 如果我不能什么都是我的其他选项在.m文件的类方法中从.h文件访问变量

@property(atomic, weak) NSArray *myArray; 
    +(void)Fuction { 
    self.myarray = [[NSArray alloc]init]; 
    } 
+0

请添加语言标签。 – Tsyvarev

+0

你想做什么?是否应该为整个班级或每个实例设置一个“myArray”? –

+0

不,我有这个数组来附加从服务器下载的对象。但是在完成写操作之前数组正在被其他线程读取。所以我得到了不完整的数组。我想通过使用@属性使它成为原子来使它安全。但@属性只能用于全局变量。全局变量不能用在类方法中。 – Lax

回答

0

即使你可以得到访问的一类方法的财产,我不认为会atomic解决这个问题。听起来好像你需要同步而你正在做附件。 (或附加到本地变量,然后将其分配到myArray。)

有一篇关于如何在队列中执行此操作的好文章https://mikeash.com/pyblog/friday-qa-2011-10-14-whats-new-in-gcd.html。看一下名为“自定义并发队列和障碍”的部分。

他演示了如何保护字典,但为此目的,数组并没有明显不同。

+0

我用@synchronized来解决问题,但是。当数组在不同的地方被使用时@ synchronized(){}块超过了25行,我认为它很大,可能会让这个过程变慢一点。想知道如果这是更好的解决方案。感谢您的回应。 – Lax

+0

他的队列解决方案的好处是读者不会阻止其他读者(这是@synchronized的潜在问题)。 –

相关问题