2010-11-10 12 views
73

Normal olarak, bir arka plan iş parçacığı oluşturuyorsanız veya bir NSOperationQueue ürününde bir NSOperation çalıştırıyorsanız, bu iş parçacığı veya işlem için bir NSAutoreleasePool oluşturmanız gerekir;GCD'de bir blokta bir NSAutoreleasePool oluşturmanız mı gerekiyor?

Aynı kural, bir Grand Central Dispatch kuyruğuna yerleştirilen ve ana olmayan bir iş parçacığında çalıştırılacak bir blok için de geçerli midir? Yani, ana sıranın dışındaki herhangi bir şeye gönderdiğiniz her bir blokta bir NSAutoreleasePool oluşturmanız mı gerekiyor?

Sınırlı testlerimde, arka plan iş parçacıkları veya NSOperations ile normalde gördüğünüz otomatikleştirilmiş nesneler için konsol uyarılarını göremiyorum. Ancak, bununla ilgili kesin belgeler bulamıyorum, bu yüzden birisinin bunun nerede belirtildiğini gösterip gösteremeyeceğini merak ediyordum.

+0

, [dokümanları buradadır] (http://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues. Görüntüleyenlerin ilgisini çekmesi durumunda html # // apple_ref/doc/uid/TP40008091-CH102-SW17). – iDev

cevap

107

aynı kural bir olmayan ana iş parçacığı üzerinde bir Grand Central Sevk kuyruğuna içine yerleştirilir ve idare edilecek bir blok için de geçerli mi? Yani, içinde bir NSAutoreleasePool oluşturmak için 'a gereksiniminiz var mı? Her bir bloğa ana kuyruktan başka bir şey gönderirsiniz?

Büyük merkezi dağıtım, otomatik olarak bir otomatikleştirme havuzunu her kuyrukta yönetir. Bununla birlikte, havuzun ne zaman boşaltılacağı konusunda bir garanti yoktur; Bir blok işlendikten sonra olabilir, yüzlerce sonra olabilir (ama muhtemelen olmayacak).

Sadece birkaç nesne ayırıyorsanız, endişelenmeyin. Ancak, önemli sayıda nesne ayırıyorsanız (ve bellek kısıtlı bir ortamı hedefliyorsanız), o zaman havuzları oluşturup doldurmalısınız.

( )

https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref/doc/uid/TP40008091-CH102-SW1

engellenenler birkaç Objective-C nesneleri daha oluşturursa , sen olanlar için bellek yönetimini ele bir @autorelease bloğunda senin bloğun kodunun parçalarını içine isteyebilirsiniz gör nesneler. GCD'nin kuyruklarının kendi otomatik çalıştırma havuzlarına sahip olmasına rağmen, bu havuzlar boşaltıldığında ile ilgili hiçbir garanti vermez. Uygulamanızın belleği kısıtlıysa, kendi otomatikleştirme havuzunuzu oluşturmak, belleğini daha otomatik aralıklarla otomatikleştirilmiş nesneler için boşaltmanıza olanak tanır. çıkarıldı @Gustavo Ambrozio tarafından gönderildi cevap itibaren

+3

+1 bu belgede herhangi bir yerde var mı? –

+6

Açıkça yeterli değil. Dokümantasyon hatası dosyalandı (). – bbum

+3

Mükemmel. Açıklama için teşekkürler. –

İlgili konular