सीखना मैं ब्लॉक का बड़ा प्रशंसक हूं, लेकिन इन्हें समवर्तीता के लिए उपयोग नहीं किया है। कुछ googling के बाद, मैं एक ही जगह में सीखा सब कुछ छिपाने के लिए इस विचार को एक साथ मिलाया। लक्ष्य पृष्ठभूमि में एक ब्लॉक निष्पादित करने के लिए है, और इसके समाप्त होने पर, (UIView एनीमेशन की तरह) एक और ब्लॉक पर अमल ...एनएसब्लॉकऑपरेशन
- (NSOperation *)executeBlock:(void (^)(void))block completion:(void (^)(BOOL finished))completion {
NSOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:block];
NSOperation *completionOperation = [NSBlockOperation blockOperationWithBlock:^{
completion(blockOperation.isFinished);
}];
[completionOperation addDependency:blockOperation];
[[NSOperationQueue mainQueue] addOperation:completionOperation];
NSOperationQueue *backgroundOperationQueue = [[NSOperationQueue alloc] init];
[backgroundOperationQueue addOperation:blockOperation];
return blockOperation;
}
- (void)testIt {
NSMutableString *string = [NSMutableString stringWithString:@"tea"];
NSString *otherString = @"for";
NSOperation *operation = [self executeBlock:^{
NSString *yetAnother = @"two";
[string appendFormat:@" %@ %@", otherString, yetAnother];
} completion:^(BOOL finished) {
// this logs "tea for two"
NSLog(@"%@", string);
}];
NSLog(@"keep this operation so we can cancel it: %@", operation);
}
मेरे प्रश्न हैं:
- यह काम करता है जब मैं इसे चलाने , लेकिन क्या मुझे कुछ याद आ रहा है ... छुपे हुए भूमि की खान? मैंने रद्दीकरण का परीक्षण नहीं किया है (क्योंकि मैंने लंबे ऑपरेशन का आविष्कार नहीं किया है), लेकिन क्या ऐसा लगता है कि यह काम करेगा?
- मुझे चिंता है कि मुझे पृष्ठभूमि की घोषणा की मेरी योग्यता अर्हता प्राप्त करने की आवश्यकता है ताकि मैं इसे पूर्णता ब्लॉक में देख सकूं। कंपाइलर शिकायत नहीं करता है, लेकिन वहाँ एक छिद्र चक्र वहाँ छिप रहा है?
- यदि "स्ट्रिंग" एक ivar था, तो क्या होगा यदि ब्लॉक चल रहा था, तो मैंने महत्वपूर्ण मूल्य देखा? या मुख्य धागे पर टाइमर सेट करें और समय-समय पर लॉग इन करें? क्या मैं प्रगति देख पाऊंगा? क्या मैं इसे परमाणु घोषित करूंगा?
- यदि यह मेरी अपेक्षा के अनुसार काम करता है, तो यह सभी विवरण छिपाने और समेकन प्राप्त करने का एक अच्छा तरीका प्रतीत होता है। ऐप्पल ने मेरे लिए यह क्यों नहीं लिखा? क्या मुझे कुछ महत्वपूर्ण याद आ रही है?
धन्यवाद।
आप GCD का उपयोग कर विचार किया है पढ़ने के बाद लगता है? या यह पूरी तरह से एक सीखने का अभ्यास है? एक धारावाहिक कतार ठीक वैसे ही लगता है जो आप खोज रहे हैं। – borrrden