今天寫了一個demo,從服務器獲取圖片,而後顯示在cell上,你們都知道cell的重用機制,當往下拉的時候,上面的cell遮住了,下面的cell就會重用被遮住的cell,緩存
貼代碼:服務器
NSString *urlstring=[dict objectForKey:@"imagePath"]; NSURL *url=[NSURL URLWithString:urlstring];//獲取圖片的url路徑 NSURLRequest *urlrequest=[[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10]; NSLog(@"UI Thread is %@",[NSThread currentThread]);//這裏是主線程 //使用UIImageView+AFNetWorking 異步下載圖片,緩存到本地 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ NSLog(@"current Thread :%@",[NSThread currentThread]);//這裏使用異步機制,確定是非UI線程 [cell.myImage setImageWithURLRequest:urlrequest placeholderImage:[UIImage imageNamed:[dict objectForKey:@"imageName"]] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { NSLog(@"load image thread is %@",[NSThread currentThread]);//猜猜這裏是什麼線程?? dispatch_async(dispatch_get_main_queue(), ^{ cell.myImage.image=image; NSLog(@"image thread :%@",[NSThread currentThread]);//這裏確定是主線程 }); NSLog(@"下載圖片成功"); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { NSLog(@"圖片加載失敗:%@",error); }];
剛學AFNetworking 的時候,不知道看了誰的博文,說異步
setImageWithURLRequest:urlrequest 這個方法是異步機制,好吧,我認可當時單純了,直到今天我寫這個demo的時候,發現若是不是用異步機制,下載的圖片很是慢,有時候還會超時,滑動cell的時候會很是卡,而後我就打印線程,看看是否是在主線程下載東西了,打印結果:

看,
setImageWithURLRequest:urlrequest 這個方法中打印的線程居然是主線程,反正我驚訝了!!