Swift'te mac komut satırı aracında DispatchQueue.main.async kullanılırken neden çalıştırma döngüsü gereklidir?

Aug 15 2020

Ana gönderim kuyruğundaki görevi uygulamak için neden çalıştırma döngüsünü kullanmam gerektiğini anlamak için Apple'ın belgesini buldum.

Apple belgelerine göre ,

Ana gönderim kuyruğu, uygulamanın ana iş parçacığında görevleri yürüten, küresel olarak kullanılabilen bir seri kuyruktur. Bu kuyruk , kuyruğa alınmış görevlerin yürütülmesini çalıştırma döngüsüne eklenmiş diğer olay kaynaklarının yürütülmesiyle birleştirmek için uygulamanın çalıştırma döngüsü (varsa) ile birlikte çalışır. Uygulamanızın ana iş parçacığında çalıştığından, ana kuyruk genellikle bir uygulama için anahtar senkronizasyon noktası olarak kullanılır.

ancak yine de, çalıştırma döngüsünün 'neden' gerekli olduğunu anlayamıyorum. 'Çalıştırma döngüsüne ihtiyacı olduğu için çalıştırma döngüsüne ihtiyacı var' gibi geliyor. Biri bana bunu açıklarsa çok memnun olacağım. Teşekkür ederim.

Yanıtlar

1 matt Aug 15 2020 at 19:37

görevi ana gönderim kuyruğunda uygulamak için neden çalıştırma döngüsünü kullanmalıyım

Normalde kullanmazsınız çünkü zaten bir tane kullanıyorsunuz!

Bir uygulama projesinde, zaten bir ana kuyruk çalıştırma döngüsü vardır . Örneğin, bir iOS uygulama projesi aslında bir çalışma döngüsü sağlayan devasa bir UIApplicationMain çağrısından başka bir şey değildir.

Kullanıcının bir şeyler yapmasını bekleyerek orada oturup bu şekilde mümkün olur. Çalıştırma döngüsü çalışıyor. Ve döngü.

Ancak, örneğin bir Mac komut satırı aracında otomatik çalıştırma döngüsü yoktur. Ana işlevini çalıştırır ve hemen çıkar. Bunu yapmamaya ihtiyacınız olsaydı, bir çalışma döngüsü sağlarsınız.

1 KavinduChathuranga Aug 15 2020 at 18:52

DispatchQueue.main.async arka planda çalışan bir kodunuz olduğu ve ana kuyrukta çalıştırılacak belirli bir kod bloğuna ihtiyacınız olduğu zamandır.

Kodunuzda viewDidLoadzaten ana kuyrukta çalışıyor, bu nedenle DispatchQueue.main.async'i kullanmak için çok az neden var.

Ama onu kullanmak ille de yanlış değil. Ama icra sırasını değiştiriyor.

eşzamansız kapanma, geçerli çalışma döngüsü tamamlandıktan sonra çalışmak üzere sıraya alınır.

Rob Aug 15 2020 at 23:56

'neden' çalıştırma döngüsüne ihtiyaç olduğunu anlayamıyorum

Genel olarak, komut satırı uygulamaları için bir çalıştırma döngüsü gerekli değildir. Özel bir gereksiniminiz varsa çalıştırma döngülerini kullanabilirsiniz (örneğin, kullanıcı girdisini beklerken bazı görevleri gerçekleştiren bazı dinamik kullanıcı arabiriminiz varsa), ancak komut satırı uygulamalarının büyük çoğunluğu çalıştırma döngüleri gerektirmez.

Gibi dokümanlar ki:

Bir çalışma döngüsü, işi planlamak ve gelen olayların alınmasını koordine etmek için kullandığınız bir olay işleme döngüsüdür. Bir çalışma döngüsünün amacı, yapılacak iş olduğunda iş parçacığınızı meşgul tutmak ve iş parçacığı olmadığında iş parçacığını uyku moduna geçirmektir.

Bu nedenle, uygulamanızın bazı gelen olayları beklemesine ihtiyacınız varsa veya görevleri sıralar arasında eşzamansız olarak gönderiyorsanız, o zaman sorun yok, çalıştırma döngüleri kullanın, ancak aksi halde uğraşmayın. Çoğu komut satırı uygulamasının çalıştırma döngüleri kullanması gerekmez.