अपडेट करने के लिए मुख्य बनाम पृष्ठभूमि धागा मैं जीसीडी और ब्लॉक के लिए नया हूं और इसमें अपना रास्ता आसान कर रहा हूं।जीसीडी - यूआईएममेज व्यू
पृष्ठभूमि: मैं एक UIScrollView ALAssetsLibrary प्रयोग करने के लिए एक आलसी दिनचर्या लोड हो रहा है पर काम कर रहा हूँ। जब मेरा UIScrollView लोड करता है तो मैं इसे अपने एलासेट्स के aspectRatioThumbnails
के साथ पॉप्युलेट करता हूं और फिर उपयोगकर्ता स्क्रॉल करता है, इसलिए मैं वर्तमान में प्रदर्शित होने वाले एलासेट के fullScreenImage
को लोड करने के लिए नीचे दी गई दिनचर्या को कॉल करता हूं। ऐसा लगता है कि काम करता है।
(यदि किसी को भी एक बेहतर आलसी लोड हो रहा है दिनचर्या एक टिप्पणी पोस्ट कृपया है। मैं सब पर मैं देखा है हो सकता है लगता है प्लस WWDC वीडियो पर वे खपरैल के साथ और अधिक सौदा करने लगते हैं या बहुत अधिक जटिलता की तुलना में मैं की जरूरत है)
मेरा प्रश्न : मैं fullScreenImage
लोड हो रहा है संभाल करने के लिए एक पृष्ठभूमि के धागे का उपयोग करें और इसके पूर्ण होने पर मैं UIImageView पर लागू करने का मुख्य थ्रेड का उपयोग करें। क्या मुझे मुख्य धागे का उपयोग करने की आवश्यकता है? मैंने देखा है कि सभी UIKit अपडेट मुख्य थ्रेड पर होने की आवश्यकता है, लेकिन मुझे यकीन नहीं है कि यह UIImageView पर लागू होता है या नहीं। मैं सोच रहा था कि यह करता है, क्योंकि यह एक स्क्रीन तत्व है लेकिन तब मुझे एहसास हुआ कि मुझे बस पता नहीं था।
- (void)loadFullSizeImageByIndex:(int)index
{
int arrayIndex = index;
int tagNumber = index+1;
ALAsset *asset = [self.assetsArray objectAtIndex:arrayIndex];
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
UIImage *tmpImage = [[UIImage alloc] initWithCGImage:asset.defaultRepresentation.fullScreenImage];
if ([weakSelf.scrollView viewWithTag:tagNumber] != nil){
dispatch_async(dispatch_get_main_queue(), ^{
if ([weakSelf.scrollView viewWithTag:tagNumber]!= nil){
UIImageView * tmpImageView = (UIImageView*)[weakSelf.scrollView viewWithTag:tagNumber];
tmpImageView.image = tmpImage;
}
});
}
});
}
बनाने यह छवि प्रतिपादन है जब आप पृष्ठभूमि धागा में डाल के बिंदु पर मजबूत किया जा रहा है गैर शून्य के लिए जाँच करने के लिए हो सकता है? – iDev
@ एसीबी: बस एक परीक्षण किया - हाँ, यह प्रस्तुत करता है लेकिन इसे मुख्य थ्रेड (जैसे मेरे उदाहरण कोड में) से कॉल करने से लगभग 5x धीमा है। –
लेकिन UIView दस्तावेज़ के अनुसार, आप इसे मुख्य धागे में उपयोग करना चाहते हैं। मैंने उस भाग को मेरे उत्तर में दस्तावेज़ीकरण से पोस्ट किया था। – iDev