簡體   English   中英

目標C,一次一種方法?

[英]Objective C, one method at a time?

如果我在cocos2d中創建一個簡單的Xcode項目,我總是想知道在以下情況下會發生什么:

方法A每0.01秒安排一次

方法B每1秒安排一次

現在假設方法B是一個很大的方法,需要花一點時間來計算。 是否會被方法A打斷?

換句話說,一個方法總會在另一個方法開始之前完成嗎?

我沒有創建線程或任何東西。

通常,當您在UI應用程序的UI線程中調度內容時,一旦啟動特定操作,它就不會被中斷(錯誤除外)。 這不僅適用於iOS,也適用於大多數UI平台。

系統可以中斷UI線程以處理硬件中斷(或者,例如,由於接收到的單元信號引起的中斷),但是這些中斷對於應用程序(大部分)是“透明的”。

但是你永遠不會被自己的行動打斷。

這假設您將使用NSTimer來安排您的方法,並且兩個方法都將在同一個runloop上進行處理(即,每個方法不使用單獨的線程,這通常在您希望安排兩個獨立運行的方法時完成)。

該引用直接來自蘋果網站上的NSTimer 類參考概述部分

如果在長時間標注期間或在運行循環處於不監視計時器的模式下發生計時器的觸發時間,則計時器在下次運行循環檢查計時器之前不會觸發。 因此,計時器可能發射的實際時間可能是在計划的發射時間之后的重要時間段。

也就是說,方法A的輪詢機制(例如NSTimer )在方法B完成之前不會觸發,假設它們處於同一個運行循環中。 方法A不會因為sé而中斷方法B,而是依賴於它完成其任務。

如果您想要將方法A和方法B放在單獨的線程上以便它們獨立工作的信息,您可以從這里開始: Grand Central Dispatch

如果您不使用線程,則保證您的方法按順序執行,不會中斷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM