Bu kadar uzun aynı iş parçacığı üzerindeBu Core Graphics kod parçacığı güvenli mi?
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
UIGraphicsEndImageContext();
dediğimiz gibi herhangi parçacığı üzerinde çizmek güvenli olduğunu biliyoruz.
Bu yöntemle bir görünümün ekran görüntüsünün alınması yaklaşık 300 ms sürer, bu da kötü değildir, ancak sıkı bir durumdayım, bu yüzden arka plan iş parçacığında yapmak istiyorum.
İşte yapıyorum: Söz konusu burada
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
});
tek şey ana iş parçacığı üzerinde yatıyor view
vardır. Bir view.layer
üzerinde renderInContext
numaralı telefonu bir arka plan iş parçacığından aramak güvenli midir? Veya genel olarak, başka bir iş parçacığından bir UIKit nesnesinin salt okunur olması güvenli midir?
(Ve lütfen bana "UIKit iş parçacığı güvenli değil" cevabını vermeyin lütfen. Bunu zaten biliyoruz. Burada özel bir durum var (ve özel durumlar olmadığını söyleme.)
(kod yukarıdaki çalışıyor, ama bu sadece bir tesadüf olmadığından emin değilim.)
Bu soruya kesin bir yanıt alacağınızı düşünmüyorum çünkü Apple'ın hiçbir yerinde Apple'ın "UIKit" dizgesi dışında bir şey belirtmediğini (listelenen istisnalar dışında) gösterecektir. Elde edeceğiniz şey, diğer insanlardan gelen görüşler ve deneyimlerdir, fakat dediğiniz gibi, yukarıdaki kodlar iyi çalışır, ancak kimin her zaman ve hatta bir başkasının size söyleyeceğini söylese bile, söyleyecekler mi? – Rog
Bir iş parçacığının değiştirilmesi veya okunması için iş parçacığı kuralları uygulanır mı? – Snowman
Ve eğer daha önce bir kopyasını kopyalıyorsam, eminim ki bu yöntem bu yeni kopyaya erişimi olan tek kişi olabilir mi? – Snowman