簡體   English   中英

UIAlertAction 處理程序塊和主線程

[英]UIAlertAction handler block and main thread

場景:向用戶呈現一個 UIAlertController,它有一個按鈕,一個處理程序塊更新 UI 以指示按下按鈕。 處理程序塊中的代碼包裝在 dispatch_async 中,以確保代碼在主線程上運行。

問題:一位代碼審查員說 dispatch_async 是不必要的,但我們都找不到引用來支持它。 關於處理程序的 Apple 文檔只說

處理程序 當用戶選擇操作時要執行的塊。 此塊沒有返回值,並將選定的操作 object 作為其唯一參數。

我找不到任何可以保證他的 position 的東西——UIAlertAction 處理程序塊將始終在主線程上運行——是正確的,在沒有這樣的情況下,我傾向於保留 dispatch_async。 無論哪種方式都有明確的說法嗎?

“明確的聲明”是 Paulw11 已經引用的事實:所有用戶交互都發生在主線程上。 保證這一事實對於 iOS 編程至關重要 沒有它,整個運行時都會崩潰。 除了隨處記錄的事實之外,不需要記錄它。

因此,除非您找到某種邪惡的方式以編程方式從主線程運行此方法,否則它將運行的唯一方式是因為用戶點擊了按鈕,因此您確實可以保證您在主線程上。 你應該改變你的傾向; 額外的調度是不必要的浪費。

另一種看待它的方式:只要你冒着被從主線程回調的風險,Apple 就會記錄下來。 他們在這里不這樣做,所以沒有這樣的風險。

暫無
暫無

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

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