什么时候需要自定义view
1 需要特殊的图形
2 需要控制触摸事件的时候
同步下载模型
由上图可知:同步下载需要三步
1 由手机客户端向服务器端发起请求,服务器端接受请求,并且剖析http参数
2 服务器端把数据发送给客户端,客户端一直阻塞等待返回数据
3 数据接收完成
同步下载的缺点
交互不好,容易卡死,一般下载数据较小或者由特定的需求
//同步请求
/*//第一步 创建一个URL
//NSURL把字符串转化成一个URL(网络资源地址)
NSURL *pUrl = [NSURL URLWithString:URL];
//第二个 创建一个请求
//创建一个请求(根据网络资源地址) 用来给服务器端 发送请求 NSURLRequestUseProtocolCachePolicy缓存机制
//timeoutInterval反应的事件的最大时间
NSURLRequest *pRequest = [[NSURLRequest alloc]initWithURL:pUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//第三步 建立连接
//根据发送同步请求的时候 需要的两个参数(发起之后 线程就会一直等待服务器响应 知道超出最大的时间)
NSURLResponse *pResponse = nil;
NSError *pError = nil;
NSData *pData = [NSURLConnection sendSynchronousRequest:pRequest returningResponse:&pResponse error:&pError];
NSLog(@"pData = %@",pData);
NSLog(@"pError = %@",[pError localizedDescription]);
*/
异步下载模型
忽然同步下载的区别是异步下载发送请求后不会等待接收完数据
异步下载也有三步
1 客户端向服务器发送请求 服务器接收请求并剖析http参数
2 应用程序再后台下载数据 在这个过程不会阻塞客户端运行(可以认为是打开一个下载工具 就不用管了 下载失败或者成功会有回调)
3 数据接收完成
/*异步请求*/
//1.获取网络资源路径(URL)
NSURL *pURL1 = [NSURL URLWithString:URL];
//2.根据URL创建请求
NSURLRequest *pRequset1 = [NSURLRequest requestWithURL:pURL1 cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//3.(与同步请求的区别点)发起请求,通过委托模式回调完成数据获取
[NSURLConnection connectionWithRequest:pRequset1 delegate:self];
[self.window makeKeyAndVisible];
return YES;
}
#pragma mark URLConnectionDataDelegate
//1.服务器响应回调的方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"服务器响应");
self.pData = [NSMutableData dataWithCapacity:5000];
}
//2.服务返回数据,客户端开始接受(data为返回的数据)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"服务器返回数据");
//将返回数据放入缓存区
[self.pData appendData:data];
}
//3.数据接受完毕回调的方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"数据接受完毕");
NSLog(@"pData = %@",self.pData);
}
//4.接受数据失败时候调用的方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"数据接受失败,失败原因:%@",[error localizedDescription]);
}