2012-03-11 20 views
0

我收到了一個應用程序,我在這裏下載圖像。我這樣做:從url轉換爲uiimage時暫停

NSString *imgURL = [@"http://www.kwikspik.com/static/" stringByAppendingString:spikFromTopic.user_image]; 
     NSData *imgData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:imgURL]]; 
     UIImage *image = [[UIImage alloc] initWithData:imgData]; 
     UIImageView *userImage =[[UIImageView alloc] initWithFrame:CGRectMake(20,size,userImageSize,userImageSize)]; 
     userImage.image = image; 

此代碼實現了很長時間。

互聯網連接問題?或者可能在我的代碼?

+1

你是否嘗試加載圖像同步或在另一個線程?http://www.switchonthecode.com/tutorials/loading-images-asynchronously-on-iphone-using-nsinvocationoperation – pkyeck 2012-03-11 09:06:47

回答

0

您正在進行同步調用以獲取圖像數據。這意味着在這段時間你的主線程(UI線程)將保持阻塞狀態(前提是這不是從線程調用的,我假設不是因爲你正在更新UI,而應該總是在主UI線程中),它實際上意味着你不能做任何事情,直到調用返回您可以使用異步(非阻塞的方式來做到這一點使用大中央調度(GCD)

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{   
// This runs in background    

NSData *imgData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:imgURL]]; 
     UIImage *image = [[UIImage alloc] initWithData:imgData];    


     dispatch_async(dispatch_get_main_queue(), ^{       
      //This block runs on main thread, so update UI 
      UIImageView *userImage =[[UIImageView alloc] initWithFrame:CGRectMake(20,size,userImageSize,userImageSize)]; 
     userImage.image = image; 
      });  
    }); 

一個例子或檢查出像sendAsynchronousRequest API:。隊列:completionHandler在NSURLConnection的