Tag: 客观上

图像持久性和延迟加载与Dispatch_Async的冲突

我正在一个饲料阅读器,我通过使用nsxmlparserparsingRSS源。 我也有从CDATA块取得的缩略图对象。 -(void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSString *someString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding]; NSString *storyImageURL = [self getFirstImageUrl:someString]; NSURL *tempURL = [NSURL URLWithString:storyImageURL]; NSData *tempData = [NSData dataWithContentsOfURL:tempURL]; thumbnail = [UIImage imageWithData:tempData]; }); } 我坚持使用归档和编码和解码方法的图像和其他tableview对象。 问题是,当我使用上面的代码,它不会保留图像,而像标题和发布date等其他tableview对象仍然存在。 但是,当我使用上面的代码没有dispatch_async周围,然后开始持久化图像,但locking用户界面。 如何在不locking用户界面的情况下坚持图像? 请不要回答一些库来存储和caching图片或苹果的懒加载示例。 谢谢 更新: 根据所提供的答案和斯坦福大学在iTunes上观看multithreading讲座后,我已经实现了以上代码: NSString *someString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding]; NSString *storyImageURL […]

如何在UIImageView中asynchronous加载图像?

我有一个UIImageView子视图的UIView。 我需要在UIImageView中加载图像而不会阻塞UI。 阻止调用似乎是: UIImage imageNamed: 这是我想解决这个问题: -(void)updateImageViewContent { dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ UIImage * img = [UIImage imageNamed:@"background.jpg"]; dispatch_sync(dispatch_get_main_queue(), ^{ [[self imageView] setImage:img]; }); }); } 图像很小(150×100)。 但是,加载图像时UI仍然被阻塞。 我错过了什么? 这是一个小的代码示例,performance出这种行为: 创build一个基于UIImageView的新类,将其用户交互设置为YES,在UIView中添加两个实例,并实现其touchesBegan方法,如下所示: -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (self.tag == 1) { self.backgroundColor= [UIColor redColor]; } else { dispatch_async(dispatch_get_main_queue(), ^{ [self setImage:[UIImage imageNamed:@"woodenTile.jpg"]]; }); [UIView animateWithDuration:0.25 […]