Junior — Middle
რის პირობებში main.sync-ის გამოყენება ურთიერთბლოკირებას არ გამოიწვევს?
sobes.tech AI
პასუხი AI-სგან
DispatchQueue.main.sync-ის გამოყენება მხოლოდ იმ შემთხვევაში არ გამოიწვევს ურთიერთბლოკირებას (deadlock), თუ ის არ ხორციელდება მთავარი ნაკადიდან. თუ თქვენ გამოიძახებთ main.sync-ს მთავარი ნაკადიდან, ეს ნაკადი ელოდება ბლოკის დასრულებას, რომელიც ვერ დაიწყება, რადგან მთავარი ნაკადი უკვე დაკავებულია — ეს გამოიწვევს deadlock-ს.
უსაფრთხო გამოყენების მაგალითი:
DispatchQueue.global().async {
DispatchQueue.main.sync {
// UI განახლება
}
}
აქ, main.sync-ის გამოძახება ხდება ფონურ ნაკადზე, ამიტომ ბლოკირება არ ხდება. მთავარი წესი — არასოდეს გამოიძახოთ DispatchQueue.main.sync მთავარი ნაკადიდან.