दुख की बात है कि मुझे लगता है कि NSOperationQueue
एस हैं, जैसा कि नाम से पता चलता है, केवल कतार के रूप में प्रयोग योग्य - ढेर के रूप में नहीं। कार्यों के मैन्युअल मार्शलिंग के पूरे समूह को करने से बचने के लिए, शायद सबसे आसान बात यह है कि आप अपनी कतारों का इलाज करें जैसे कि वे प्रतिलिपि बनाकर अपरिवर्तनीय और उत्परिवर्तित थे। जैसे
- (NSOperationQueue *)addOperation:(NSOperation *)operation toHeadOfQueue:(NSOperationQueue *)queue
{
// suspending a queue prevents it from issuing new operations; it doesn't
// pause any already ongoing operations. So we do this to prevent a race
// condition as we copy operations from the queue
queue.suspended = YES;
// create a new queue
NSOperationQueue *mutatedQueue = [[NSOperationQueue alloc] init];
// add the new operation at the head
[mutatedQueue addOperation:operation];
// copy in all the preexisting operations that haven't yet started
for(NSOperation *operation in [queue operations])
{
if(!operation.isExecuting)
[mutatedQueue addOperation:operation];
}
// the caller should now ensure the original queue is disposed of...
}
/* ... elsewhere ... */
NSOperationQueue *newQueue = [self addOperation:newOperation toHeadOfQueue:operationQueue];
[operationQueue release];
operationQueue = newQueue;
यह वर्तमान में लगता है कि एक कतार है कि अभी भी काम कर रहा है जारी है (जैसा कि वर्ष आपरेशन कतार का क्या होगा) यह सब कार्यवाही रद्द करना का कारण नहीं है, लेकिन ऐसा शायद व्यवहार दर्ज नहीं किया है भरोसेमंद नहीं। यदि आप वास्तव में सुरक्षित होना चाहते हैं, तो कुंजी-मान पुरानी कतार पर operationCount
संपत्ति का निरीक्षण करें और शून्य पर जाने पर इसे रिलीज़ करें।
मैं belive इस काम करेगा, मैं सिर्फ एक NSMutableArray से अपने ही स्टैक बनाने के लिए तय कर लिया है। इनपुट के लिए धन्यवाद। – Padin215
रिकॉर्ड के लिए, मैंने अपना खुद का ढेर बनाने से बचा होगा क्योंकि आप ऑपरेशन जारी करने और उनकी प्रगति की निगरानी के लिए ज़िम्मेदार हैं, यानी आप 'NSOperationQueue' पहले से ही बहुत कुछ कर रहे हैं। यदि आप समवर्ती परिचालनों का उपयोग कर रहे थे तो आप निश्चित रूप से कम कुशल होने पर निश्चित रूप से समाप्त हो जाएंगे। जाहिर है कि इसमें से कोई भी आपकी विशिष्ट ज़रूरतों के अनुरूप नहीं है और मुझे यकीन है कि आप सही काम कर रहे हैं, मैंने सोचा कि मैं पूर्णता के लिए कहूंगा। – Tommy
मैं यूआरएल का ढेर बना रहा हूं कि मुझे डब्लूएमएस टाइल के लिए कॉल करने की ज़रूरत है। मैं जांचता हूं कि मेरे पास एक्स टाइल है, अगर यह कैश में नहीं है, तो मैंने यूआरएल को स्टैक पर रखा है। मेरे पास एक टाइमर है जो कभी भी 2 सेकंड तक आग लगता है जो अनुरोध बनाएगा और उसे निष्पादित करने के लिए जीडीसी कतार में रखेगा। – Padin215