NSURLConnection數據流下載異步解決方案

#import "URL.h"

@interface URL ()
//文件輸出流
@property(nonatomic,strong) NSOutputStream * fileStream;

//下載線程的運行循環
@property(nonatomic,assign) CFRunLoopRef downloadRunloop;

@end

@implementation URL

- (void)viewDidLoad {
[super viewDidLoad];
[self outputStream];

}

//輸出流
-(void)outputStream{

dispatch_async(dispatch_get_global_queue(0, 0), ^{

    //創建統一資源定位符
    NSURL *url = [NSURL URLWithString:@"http://localhost/001--NSURLConnection.wmv.pbb"];

    //創建網絡請求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];

    //CFRunLoopStop(r)      停止指定的RunLoop
    //CFRunLoopGetCurrent() 拿到當前的RunLoop
    //CFRunLoopRun()        直接啓動當前的RunLoop運行循環

    self.downloadRunloop = CFRunLoopGetCurrent();

    CFRunLoopRun();

});

}

//接收頭信息
- (void)connection:(NSURLConnection )connection didReceiveResponse:(NSURLResponse )response{

NSString *path = [@"/Users/xiaojie/Desktop/xiaoxiao" stringByAppendingPathComponent:response.suggestedFilename];

[[NSFileManager defaultManager]removeItemAtPath:path error:NULL];

self.fileStream = [[NSOutputStream alloc]initToFileAtPath:path append:YES];

[self.fileStream open];

}

//不斷接收數據
- (void)connection:(NSURLConnection )connection didReceiveData:(NSData )data{

[self.fileStream write:data.bytes maxLength:data.length];

}

//數據傳輸完畢
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{

[self.fileStream close];
//停止RunLoop
CFRunLoopStop(self.downloadRunloop);

}
@end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章