2011-11-10 107 views
0

我有一個線程在後臺運行本機代碼,每隔一段時間觸發一些回調。本機回調調用Objective-C方法。對於每次調用,我基本上都在重新繪製東西或改變我的類的某些值。所以我會得到很多同步問題。iOS - 線程安全和performSelectorOnMainThread

是否有可能解決這個問題,而不是鎖,而只是在每個回調函數上執行performSelectorOnMainThread?這會防止同步問題,還是太過分了?

回答

1

任何圖紙必須發生在主線程上,因此即使您正在使用鎖,也需要類似-performSelectorOnMainThread的東西。

您可能還想了解如何使用塊和調度隊列作爲回調函數,以便在不顯式鎖定的情況下處理同步問題。 Apple Concurrency Programming Guide有許多關於使用塊和分派隊列作爲線程/鎖定的替代方法的信息。塊和隊列是在C級(而不是Objective-C)實現的,所以你可以很容易地將它們添加到C代碼中(我假定你的意思是「本地」),而不需要把東西改寫成Objective-C。

(請注意,使用塊回調時,你仍然需要確保你的UI繪圖操作被分派到主隊列,所以他們在主線程上運行。)

+0

拱起部在主線程中完成,因爲我在主線程上做了「reloadData」。我想知道是否可以通過在主線程上對它們執行任何更新(例如,將元素移除/添加到包含所有元素的數組,然後在mainthread上重載數據)來在變量上轉義鎖等。 – KaiserJohaan