2012-04-11 36 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