यदि आप इस व्यवहार से मेल खाने वाली किसी चीज़ की उम्मीद कर रहे हैं (या चाहते हैं):
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>
आपको इस बात की जानकारी होनी चाहिए कि यदि कई "शॉर्ट" ऑपरेशंस को एक कतार में जोड़ा जा रहा है, तो आप इस व्यवहार को देख सकते हैं (क्योंकि ऑपरेशन्स को कतार में जोड़े जाने के भाग के रूप में शुरू किया गया है):
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>
मेरी परियोजना में मुझे यह जानने की जरूरत थी कि आखिरी ऑपरेशन पूरा होने के बाद, बड़ी संख्या में ऑपरेशन के बाद एक धारावाहिक NSOperationQueue (यानी, maxConcurrentOperationCount = 1) में जोड़ा गया था और केवल जब वे सभी पूरे हो गए थे।
Googling मैं एक प्रश्न के जवाब में एक Apple डेवलपर से यह बयान मिला "एक धारावाहिक NSoperationQueue FIFO है?" -
यदि सभी ऑपरेशनों की प्राथमिकता समान होती है (जो कि एक कतार में जुड़ने के बाद नहीं बदली जाती है) और सभी ऑपरेशन हमेशा होते हैं - isReady == जब तक वे ऑपरेशन कतार में लगाए जाते हैं, तब तक एक धारावाहिक NSOperationQueue FIFO होता है।
क्रिस केन कोको फ्रेमवर्क, एप्पल
मेरे मामले में यह जानना संभव है कि आखिरी ऑपरेशन को कतार में कब जोड़ा गया था। इसलिए अंतिम ऑपरेशन जोड़े जाने के बाद, मैं एक और ऑपरेशन को कतार में जोड़ता हूं, निचली प्राथमिकता का, जो कुछ भी नहीं करता है, लेकिन अधिसूचना को भेजें कि कतार खाली कर दी गई थी। एप्पल के बयान को देखते हुए, यह सुनिश्चित करता है कि सभी कार्यों के पूरा होने के बाद केवल एक ही नोटिस भेजा जाता है।
यदि संचालन को ऐसे तरीके से जोड़ा जा रहा है, जो पिछले एक (यानी, गैर-नियतात्मक) का पता लगाने की अनुमति नहीं देता है, तो मुझे लगता है कि आपको ऊपर उल्लिखित KVO दृष्टिकोण के साथ जाना होगा, अतिरिक्त गार्ड तर्क के साथ अगर यह पता लगाने की कोशिश की गयी तो संचालन जोड़ा जा सकता है।
:)