同步意爲着線程阻塞,在主線程中使用此方法會不響應任何用戶事件。所以,在應用程序設計時,大多被用在專門的子線程增加用戶體驗,或用異步請求代替。AD:2014WOT全球軟件技術峯會北京站 課程視頻發
1. 同步意爲着線程阻塞,在主線程中使用此方法會不響應任何用戶事件。程序容易出現卡死現象.所以,在應用程序設計時,大多被用在專門的子線程增加用戶體驗,或用異步請求代替。
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");
}