網絡請求connection session

網絡請求:網絡

NSURLConnection框架

發送同步請求:異步

nsurlconnection發送同步請求是阻塞式,會阻塞當前線程async

 

發送異步請求:oop

nsurlconnection發送異步請求底層是開啓子線程發送請求,回調默認是在主線程中回調,若是須要在子線程中回調能夠設置代理隊列setDelegateQueue:子線程隊列.atom

PS:請求大的響應數據時使用delegate方式更加適合url

 

NSURLConnection與NSRunLoopspa

#import "ViewController.h"

@interface ViewController () <NSURLConnectionDataDelegate>
/** runLoop */
@property (nonatomic, assign) CFRunLoopRef runLoop;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 若是在子線程中使用NSURLConnection發送請求是不會有效果,由於子線程的runloop沒有啓動,子線程runloop默認是不啓動的
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSURLConnection *conn = [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com/images/234234324limgAB/2342lkjasdf3kkkkk.jpg"]] delegate:self];
        // 決定代理方法在哪一個隊列中執行
        [conn setDelegateQueue:[[NSOperationQueue alloc] init]];
        
        // 啓動子線程的runLoop
//        [[NSRunLoop currentRunLoop] run];
        
        // 保存當前runloop
        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

 

NSURLSession線程

使用NSURLSession 對象建立Task,而後執行Task代理

Task的類型: NSURLSessionTask抽象類, 派生出子類有NSURLSessionDataTask,NSURLSesssionDownloadTask,NSURLSessionDataTask又派生出NSURLSessionUploadTask

NSURLSessionTask(抽象類)

  • NSURLSessionDataTask
    • NSURLSessionUploadTask
  • NSURLSessionDownloadTask

 

文件上傳:

 

文件解壓縮:

 ZipArchive框架

 

小文件寫入:

NSData

 

大文件寫入

NSFileHandle

NSOutPutStream

相關文章
相關標籤/搜索