Bu davranışa uyan bir şey bekliyorsanız (veya arzuluyorsanız):
t=0 add an operation to the queue. queueucount increments to 1
t=1 add an operation to the queue. queueucount increments to 2
t=2 add an operation to the queue. queueucount increments to 3
t=3 operation completes, queuecount decrements to 2
t=4 operation completes, queuecount decrements to 1
t=5 operation completes, queuecount decrements to 0
<your program gets notified that all operations are completed>
Bir kuyruğa birkaç "kısa" işlem ekleniyorsa, bunun yerine şu davranışı görebileceğinizi bilmelisiniz (çünkü işlemler kuyruğa eklenmenin bir parçası olarak başlatılır):
t=0 add an operation to the queue. queuecount == 1
t=1 operation completes, queuecount decrements to 0
<your program gets notified that all operations are completed>
t=2 add an operation to the queue. queuecount == 1
t=3 operation completes, queuecount decrements to 0
<your program gets notified that all operations are completed>
t=4 add an operation to the queue. queuecount == 1
t=5 operation completes, queuecount decrements to 0
<your program gets notified that all operations are completed>
Projemde, bir seri NSOperationQueue'ya (yani, maxConcurrentOperationCount = 1) çok sayıda işlem eklendikten sonra ve yalnızca hepsi tamamlandığında son işlemin ne zaman tamamlandığını bilmem gerekiyordu.
Google'da "seri bir NSoperationQueue FIFO mu?" Sorusuna yanıt olarak bir Apple geliştiricisinden gelen bu ifadeyi buldum. -
Tüm işlemler aynı önceliğe sahipse (işlem bir kuyruğa eklendikten sonra değiştirilmez) ve tüm işlemler her zaman - isReady == YES işlem kuyruğuna girdiklerinde, o zaman bir seri NSOperationQueue FIFO'dur.
Chris Kane Kakao Çerçeveleri, Apple
Benim durumumda, kuyruğa son işlemin ne zaman eklendiğini bilmek mümkündür. Bu yüzden, son işlem eklendikten sonra, kuyruğun boşaltıldığına dair bildirim göndermekten başka hiçbir şey yapmayan daha düşük öncelikli başka bir işlemi kuyruğa ekliyorum. Apple'ın beyanına göre, bu, yalnızca tüm işlemler tamamlandıktan sonra yalnızca tek bir bildirimin gönderilmesini sağlar.
İşlemler, sonuncuyu tespit etmeye izin vermeyecek bir şekilde ekleniyorsa (yani, deterministik olmayan), o zaman yukarıda belirtilen KVO yaklaşımları ile gitmeniz gerektiğini düşünüyorum, daha fazla olup olmadığını tespit etmeye çalışmak için ek koruma mantığı ile işlemler eklenebilir.
:)