日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS中下载大型文件的原理解析二

發(fā)布時間:2023/12/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS中下载大型文件的原理解析二 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在iOS中下載大型文件,需要使用NSURLConnection 的代理方法:

  • (void)touchesBegan:(NSSet)touches withEvent:(UIEvent *)event {
    NSURL *url = [NSURL URLWithString:@”http://d.3987.com/fengj_141112/007.jpg“];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    [NSURLConnection connectionWithRequest:request delegate:self];
    }

  • (void)connection:(NSURLConnection )connection didFailWithError:(NSError )error {
    NSLog(@”didFailWithError:%@”, [NSThread currentThread]);

}

  • (void)connection:(NSURLConnection )connection didReceiveResponse:(NSURLResponse )response {
    NSLog(@”didReceiveResponse:%@”, [NSThread currentThread]);

    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSString *filePath = [caches stringByAppendingPathComponent:@”videos.zip”];
    NSFileManager * fileManager = [NSFileManager defaultManager];
    [fileManager createFileAtPath:filePath contents:nil attributes:nil];

    self.writeHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];

    self.fileLength = response.expectedContentLength;
    }

  • (void)connection:(NSURLConnection )connection didReceiveData:(NSData )data {
    NSLog(@”didReceiveData:%@”, [NSThread currentThread]);
    [self.writeHandle seekToEndOfFile];
    [self.writeHandle writeData:data];

    self.currentLength += data.length;

    NSLog(@”下載進(jìn)度: %f”, (double)self.currentLength / self.fileLength);

}

  • (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@”connectionDidFinishLoading:%@”, [NSThread currentThread]);
    self.currentLength = 0;
    self.fileLength = 0;
    [self.writeHandle closeFile];
    self.writeHandle = nil;
    }

總體思路:
(1)首先創(chuàng)建一個空的文件:
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [caches stringByAppendingPathComponent:@”videos.zip”];
NSFileManager * fileManager = [NSFileManager defaultManager];
[fileManager createFileAtPath:filePath contents:nil attributes:nil];
(2)其次獲取操作這個文件的句柄
self.writeHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];
(3)當(dāng)數(shù)據(jù)到來后,需要將其寫入到文件中去
[self.writeHandle seekToEndOfFile];
[self.writeHandle writeData:data];
(4)最后在文件下載完畢后,需要關(guān)閉文件

[self.writeHandle closeFile];

總結(jié)

以上是生活随笔為你收集整理的iOS中下载大型文件的原理解析二的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。