2014-03-28 77 views
0

下載文件時出現問題。我有一個具有90 MB的zip文件,它將我的RAM內存填充到hudge數量,直到文件被下載。有人可以幫助我一些示例代碼,顯示任何更好的方式來做到這一點,而不是超載我的內存?將一個大文件下載到iphone會填滿內存 - xcode

謝謝。

代碼:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(queue, ^{ 
    NSURL *url = [NSURL URLWithString:@"http://autoskola.1e29g6m.xip.io/mobileData/slike3.zip"]; 
    NSError *error = nil; 

    NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error]; 


    if(!error){ 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
     NSString *path = [paths objectAtIndex:0]; 
     NSString *zipPath = [path stringByAppendingPathComponent:@"slike3.zip"]; 

     [data writeToFile:zipPath options:0 error:&error]; 

     if(!error){ 

      //unziping the files 
      ZipArchive *za = [[ZipArchive alloc] init]; 

      if([za UnzipOpenFile:zipPath]){ 
       BOOL ret = [za UnzipFileTo:path overWrite:YES]; 

       if(NO == ret){} [za UnzipCloseFile]; 



      } 

     }else{ 
      NSLog(@"Error saving file %@", error); 
     } 
    }else{ 
     NSLog(@"Error downloading zip file: %@", error); 
    } 


}); 
+0

發表一些代碼,沒有它我們不能看到發生了什麼。 – rckoenes

+0

對不起,我粘貼了我的代碼。 – Ferenc

+1

你的問題是,試圖保存整個下載內存,你不應該使用任何'* WithContentsOfURL:'互聯網URL。使用'URLConnection'或'URLSession'。 Beter現在仍然使用像Aaron Heyman建議的那樣的AFNetworking。 – rckoenes

回答

3

你可能要考慮尋找到AFNetworking。這可能是訪問互聯網最常用的庫。您可以使用它下載文件並獲取輸出流並將數據寫入文件。這將允許您下載並將文件作爲數據塊而不是一次全部寫入。您需要查看AFNetworking Docs以獲取有關下載文件的信息。您還需要查看有關如何將數據寫入文件的信息NSFileHandle的文檔。

+0

我有同樣的問題,我建議看看我的問題的答案,它進入更多的細節:http://stackoverflow.com/a/22234023/480415 – RyanG

+0

謝謝!像魅力一樣工作 – Ferenc