2012-04-11 38 views
0

我已经阅读了关于多线程的ios sdk的一些东西,但我仍然没有找到问题的答案: 在主线程中我有一个属性,程序在线程中做了一些东西,其中属性的值被更改,另一个线程需要更改的值。 那么如何在一个线程中更改属性或字段的值,以便它可以针对所有线程进行更改?属性/字段线程同步

回答

3

更改单个对象上的属性基本上会更改“针对所有线程”的值。没有线程特定的对象副本,除非你自己创建它们。

对于多线程程序,主要的挑战是确保两个线程不会尝试同时访问/写入相同的内存(在您的情况下属性)。为您的财产提供最简单的方法(但不一定是最有效或最简单的方法)是从您的财产声明中排除“nonatomic”属性。 (编辑:这里假设你正在使用@synthesize来实现你的属性,而不是@dynamic也没有定制覆盖getter和setter方法)

多线程是有点大的话题在这里介绍,但苹果的文档一个好地方开始更多的信息:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html

+0

不是最简单的方法是锁? – CodaFi 2012-04-11 23:00:27

+1

由于在属性声明中没有指定“nonatomic”,编译器会在后台放置锁码。这假设你是'@综合'他们虽然。编辑答案澄清这一点。 – MechEthan 2012-04-11 23:08:16

+0

是的,但我没有在属性声明中包含“nonatomic”属性。尽管只在一个线程中更改了值,但是并未在主线程中或在我需要的值中更改值。 – Alexander 2012-04-12 14:23:12