網絡請求

同步意爲着線程阻塞,在主線程中使用此方法會不響應任何用戶事件。所以,在應用程序設計時,大多被用在專門的子線程增加用戶體驗,或用異步請求代替。AD:2014WOT全球軟件技術峯會北京站 課程視頻發

1. 同步意爲着線程阻塞,在主線程中使用此方法會不響應任何用戶事件。程序容易出現卡死現象.所以,在應用程序設計時,大多被用在專門的子線程增加用戶體驗,或用異步請求代替。

NSURL

url,統⼀一資源定位符,也被稱爲⺴⽹網址,因特⺴⽹網上標準的資源⺴⽹網址

⼀一個典型的url:http://lily:[email protected]/search?hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page

url的符語法: 協議://授權/路徑?查詢

協議:ftp://(⽂文件傳輸協議) http://(超⽂文本傳輸協議)https://(安全超文本傳輸協議) file://(本地文件協議) 


//網址分爲兩部分,第一部分:問號之前的內容,即網址所請求的文件按所在的服務器路徑,第二部分:問號之後的內容,即向相對文件所傳輸的參數---針對於GET請求

-(NSData *)startConnect{

    //第一步:準備網址

    NSString *urlStr = @"http://project.lanou3g.com/teacher/yihuiyun/lanouproject/activitylist.php";

    //第二步:將網址進行封裝,包含請求方式

    NSURL *url = [NSURL URLWithString:urlStr];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    //告訴接下來的網絡請求連接,這個網絡請求是什麼樣的網絡

    [request setHTTPMethod:@"GET"];

    //第三步:連接服務器,同步

    NSURLResponse *response = nil;

    NSData *connection = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

    //NSLog(@"%@",connection);

    //打印服務器返回信息

    NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;

    NSDictionary *values = res.allHeaderFields;

    NSLog(@"values = %@",values);

    //connection轉化爲可讀的文本,用於分析

    NSString *str = [[NSString alloc]initWithData:connection encoding:NSUTF8StringEncoding];

    NSLog(@"%@",str);

    

    return connection;

}


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    [self creat];

}

-(void)creat{

    SyncGet *get = [[SyncGet alloc]init];

    NSData *data =[get startConnect];

    //在網站上數據存放的形式,通過JSON進行解析,根據關鍵字獲取所需要的內容.

    NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

    NSArray *events = [dic objectForKey:@"events"];

    for (NSMutableDictionary *dic1 in events) {

        NSString *adapt_url = [dic1 objectForKey:@"adapt_url"];

        NSLog(@"adapt_url = %@",adapt_url);

    }

}


2. 異步請求的好處是不阻塞當前線程,但相對於同步請求略爲複雜,至少要添加兩個回調方法來獲取異步事件,等待數據返回.

//設置NSURLConnection代理NSURLConnectionDataDelegate

-(void)startConnect:(NSString *)urlStr{

   

    NSURL *url = [NSURL URLWithString:urlStr];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    //請求方式

    [request setHTTPMethod:@"GET"];

    //連接服務器,異步網絡請求,通過協議來完成

    [NSURLConnection connectionWithRequest:request delegate:self];

}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

    //獲取服務器響應,根據⺴絡請求協議,封裝了服務器返回數據的部分信息。服務器響應⺴絡請求後,返回數據的部分信息及數據本⾝身

    NSLog(@"1");

}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

    //接收數據

    NSLog(@"2");

    //由於網絡原因,接受的數據的方法會走很多次,因此需要將每次接受的數據拼接起來

    [_receiveData appendData:data];

    NSLog(@"%@",_receiveData);

}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{

    //接收完成

    NSLog(@"3");  

}




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