2011-03-06 16 views
5

iOS/CocoaTouch üzerinde Sık sık bir yöntem içinde yeni bir NSAutoreleasePool örneği oluşturan kodu görüyorum. Yakın zamanda NSOperation'da bir tane gördüm.NSAutoreleaseHavuz. Yeni bir otomatikleştirme havuzu oluşturmak ne zaman uygun olur?

NSAutoreleasePool'un yeni bir örneğini kurmak için temel kurallar nelerdir? Bu neden, main.m'de oluşturulmuş önceden mevcut yayın havuzuna güvenmek için tercih edilir? istediğiniz zaman

sayesinde
Doug

cevap

6

Yeni sallanmasını havuzu kullanabilirsiniz, ama her zaman yararlı değildir. Yeni bir iş parçacığı başlattığınızda veya bu iş parçacığı içinde otomatik olarak işlenen nesnelerin sızdırılmış olması gerekir. Çok sayıda nesneyi oluşturduğunuz ve otomatik olarak yüklediğiniz bir yöntemde yeni otomatikleştirme havuzları oluşturmak da yaygındır. Örneğin, 50 yinelemenin her birinde 10 nesne oluşturan bir döngü olsaydı, bu yönteme ilişkin bir otomatikleştirme havuzu oluşturmayı düşünmelisiniz, aksi taktirde, her yineleme için yeni bir tane oluşturulur.

+0

Yerel bir otomatik temizleme havuzu ne zaman yararlı olmaz. İnce taneli mems yönetimi için bir motivasyon yaratıyorum. Ayrıca, yeni iş parçacıkları için yeni bir otomatikleştirme havuzu oluşturulması gerektiğini belirtirsiniz. NSOperations için bu doğru mu? Ben bir fanatik test ediciyim ve yerel bir otoritease havuzu olmayan mevcut NSOperations ile hiçbir madem sızıntı görmüyorum. – dugla

+0

@dugla NSOperations için bir tane oluşturmanız gerekip gerekmediğinden emin değilim. Bir nesne havuz olmadan otomatik olarak seçildiğinde, konsola bir mesaj yazar, böylece bir tane gerekip gerekmediğini bilmelisiniz. Bir havuz oluşturma, ömrü boyunca çok fazla nesne oluşturmazsanız, fazladan bir ayırma ekleyerek ve işlemci döngülerini aldığından, yararlı olmaz. Diğer nesneler onu kullanmadığı için, kullanım süresi boyunca nesnel c nesneleri kullanmazsanız hiçbir faydası olamaz. – ughoavgfhw

3

Halihazırda bir tane bulunmadığında (yeni bir iş parçacığında olduğu gibi) veya çalışma döngüsündeki bir kişi yeterli olmadığında kendi havuzunuzu yaratın (birçok durumda çalışacak bir döngüde otomatik olarak oluşturulmuş nesneler oluşturma yinelemeler) veya oluşturduğunuz otomatik olarak yüklenen nesnelerin nihayetinde serbest bırakıldığında kontrolün artırılmasını istediğinizde.

1

iOS 4.3'te test ettim ve performSelectorInBackground işlemini yürütürken kendi otomatikleştirme havuzu oluşturmalısınız. NSOperation veya dispatch_async kullanırken oluşturmanıza gerek yoktur.

iOS'ta görünüyor> = 5.0 sistem performSelectorInBackground kullanmasa bile otomatik olarak otomatik çalıştırma havuzu yaratır, bu yüzden kendi otomatik yedekleme havuzunu oluşturmanız gerektiğinde bir durum bulamadı.

Bu değişikliği belgelenmiş olsa da bulamadık.

İlgili konular