ग्रांड सेंट्रल डिस्पैच बहुत अच्छा है और कोड की मात्रा कम कर देता है लेकिन मैं पृष्ठभूमि थ्रेड पर कुछ क्यों नहीं चला सकता?तुलना जीसीडी बनाम प्रदर्शन चयनकर्ताबैकग्राउंड: dispatch_async पृष्ठभूमि में नहीं
- (IBAction)performSel {
[self performSelectorInBackground:@selector(doStuff) withObject:nil];
[NSThread sleepForTimeInterval:3];
[[self.view.subviews lastObject] removeFromSuperview];
}
- (IBAction)gcd {
dispatch_async(dispatch_queue_create("myGCDqueue", NULL), ^(void) {
//dispatch_sync(dispatch_queue_create("myGCDqueue", NULL), ^(void) {
//dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
//dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
//dispatch_async(dispatch_get_main_queue(), ^(void) {
//dispatch_sync(dispatch_get_main_queue(), ^(void) {
[self doStuff]; // only for readability, will move the code on success
});
[NSThread sleepForTimeInterval:3];
[[self.view.subviews lastObject] removeFromSuperview];
}
- (void)doStuff {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
UIView *abortingView = [[UIView alloc]initWithFrame: self.view.bounds];
abortingView.backgroundColor = [UIColor whiteColor];
abortingView.alpha = 0.7;
[self.view insertSubview:abortingView atIndex:10];
[abortingView release];
[pool drain];
}
[NSThread sleepForTimeInterval:3];
एक डिफ़ॉल्ट यूआई कार्यक्षमता अनुकरण करने के लिए है:
मैं दिखाने के लिए मैं क्या मतलब है (टिप्पणी की कोई भी काम न) एक नमूना आवेदन कर दिया है। उदाहरण के लिए यदि कोई एक नेविगेशन व्यू से दूसरे में स्विच कर रहा है।
बस नए दृश्य आधारित एप्लिकेशन में कोड कॉपी करें, दो बटन बनाएं और उन्हें कनेक्ट करें।
आईबीएक्शन-विधियों के जवाब में लंबे समय से चलने वाले कार्यों को सोना या करना हमेशा एक बुरा विचार है – Felix