NSOutputStream 数据流的使用
// ViewController.m // 01-了解-大文件下载(NSOutputStream) #import "ViewController.h" @interface ViewController () <NSURLConnectionDataDelegate> /** 输出流对象 */ @property (nonatomic, strong) NSOutputStream *stream; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_01.mp4"]] delegate:self]; } #pragma mark - <NSURLConnectionDataDelegate> - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { // response.suggestedFilename : 服务器那边的文件名 // 文件路径 NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSString *file = [caches stringByAppendingPathComponent:response.suggestedFilename]; NSLog(@"%@", file); // 利用NSOutputStream往Path中写入数据(append为YES的话,每次写入都是追加到文件尾部) self.stream = [[NSOutputStream alloc] initToFileAtPath:file append:YES]; // 打开流(如果文件不存在,会自动创建) [self.stream open]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.stream write:[data bytes] maxLength:data.length]; NSLog(@"didReceiveData-------"); } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { [self.stream close]; NSLog(@"-------"); } @end
// ViewController.m // 03-NSURLConnection与RunLoop #import "ViewController.h" @interface ViewController () <NSURLConnectionDataDelegate> /** runLoop */ @property (nonatomic, assign) CFRunLoopRef runLoop; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSURLConnection *conn = [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_01.png"]] delegate:self]; // 决定代理方法在哪个队列中执行 [conn setDelegateQueue:[[NSOperationQueue alloc] init]]; // 启动子线程的runLoop // [[NSRunLoop currentRunLoop] run]; self.runLoop = CFRunLoopGetCurrent(); // 启动runLoop CFRunLoopRun(); }); } #pragma mark - <NSURLConnectionDataDelegate> - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"didReceiveResponse----%@", [NSThread currentThread]); } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSLog(@"didReceiveData----%@", [NSThread currentThread]); } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"connectionDidFinishLoading----%@", [NSThread currentThread]); // 停止RunLoop CFRunLoopStop(self.runLoop); } @end