数据存储
plist,FMDB,归档。网络数据的传输与解析,网络传输建议用JSON格式数据,冗余数据少。
数据下载下来缓存,可直接把缓存保存成文件,便于处理缓存中的文件。根据需求来定。
block:
1.什么是block
//能极大的简化代码,提高效率。很多重要的开源库当中用block写的,不一定自己写,但是要知道怎么写。
UI开发和网络常见功能实现回调,按钮的事件处理方法是回调方法,网络下载后的回调处理
(1).按钮target action 一个方法传入按钮中
(2).表格视图 传入一个指针self,回调试图控制器中的方法
(3).block: 语句块。 解决回调,可理解为“匿名函数”,定义在方法里面
2.block的基本使用(语法)
(1).block变量
技巧,语法诡异。
//block变量存储匿名函数
//以下是定义block变量;函数名是block,变量类型void(^block)
void(^block)();
//以下定义block语句块,然后存储到block变量当中
block =^void(){
NSLog(@"this is block");
};
(2).block语句块
(3)参数和返回值
(4)捕获外部变量
(5)block 注意事项
3.block在开发中 应用(OC,UI,网络)
3.1 OC中的应用
Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值。Block实体形式如下:^(传入参数列){行为主体};
Block实体开头是“^”,接着是由小括号所包起来的参数列(比如 int a, int b, int c),行为主体由大括号包起来,专有名字叫做block literal。行为主体可以用return回传值,类型会被compiler自动辨别。如果没有参数列要写成: ^(void)。
Block Pointer是这样定义的:
回传值(^名字)(参数列);
比如下面的例子:
void(^block)(); //以下定义block语句块,然后存储到block变量当中 block =^void(){ NSLog(@"this is block"); };
int (^myAdd) (int x,int y)= ^int (int x,int y){ return x+y; }; int s =myAdd(12,20); NSLog(@"s===%d",s);
block的使用场合
函数指针
实现回调函数
qsort
block的函数类型变量+语句块===回调
二、AFNetworking开源库
1、AFNetworking的介绍
常见的处理网络请求方式
(1)NSURLConnection/NSURLSession
(2) ASJHttpRequest 不更新了,少用
(3)AFNetworking:推荐使用,项目中使用
(4)MKNetWorking
2、GET请求
3 JSON下载
4 DML下载
5.POST请求
6.文件上传
7.文件下载
8图片异步加载
9 判断网络状态
10头部
11 ASJHttpRequest
//1 GET请求 (html,json,xml) // [self testGetRequest]; //2POST请求 // [self testPostRequest]; //3 上传文件,上传图片 // [self testUploadFile]; //4.下载文件 // [self testDownloadFile]; //5.监控网络形态 [self testMonitorNetworkStatus]; //6.图片异步下载(可替代SDwebimage) //可加上 UIkit +AFNetworking.h //7. 有些请求有特殊的请求头 // } -(void)testMonitorNetworkStatus { AFHTTPRequestOperationManager *manager =[[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"www.baidu.com"]]; [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSDictionary *dict =@{@(AFNetworkReachabilityStatusUnknown):@"未知",@(AFNetworkReachabilityStatusNotReachable):@"不可达",@(AFNetworkReachabilityStatusReachableViaWWAN):@"GPRS",@(AFNetworkReachabilityStatusReachableViaWiFi):@"WIFI"}; NSLog(@"状态为 %@",dict[@(status)]); }]; //开启状态监视 [manager.reachabilityManager startMonitoring]; } -(void)testDownloadFile { //创建会话管理器对象(通过默认配置) NSString *urlString =@"http://imgcache.qq.com/club/item/avatar/zip/7/i87/all.zip"; AFURLSessionManager *manager =[[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; NSURLSessionDownloadTask *task =[manager downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { NSString *path =[NSString stringWithFormat:@"%@/Documents/all.zip",NSHomeDirectory()]; NSLog(@"path ==%@",path); return [NSURL fileURLWithPath:path]; } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { NSLog(@"下载wancheng"); }]; [task resume]; //返回文件保存的位置 } //测试上传文件 -(void)testUploadFile { NSString *urlString =@"http://quiet.local/uploadtest/upload.php"; //参数名 ;image :参数值是图片 AFHTTPRequestOperationManager *manager =[AFHTTPRequestOperationManager manager]; manager.responseSerializer =[AFHTTPResponseSerializer serializer]; [manager POST:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { //上传的数据附加到请求中 //mimetype 每种文件都有一个类型 NSString *path =[[NSBundle mainBundle] pathForResource:@"back2.jpg" ofType:nil]; [formData appendPartWithFileURL:[NSURL fileURLWithPath:path] name:@"image" fileName:@"jayzhang.jpg" mimeType:@"image/jpeg" error:nil ]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *str =[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"str ===%@",str); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"erro == %@",error); }]; } -(void)testPostRequest { //接口,POST接口 :http://quiet.local/testdir/login.php NSString *urlString1 =@"http://quiet.local/testdir/login.php"; AFHTTPRequestOperationManager *manager =[AFHTTPRequestOperationManager manager]; manager.responseSerializer =[AFHTTPResponseSerializer serializer]; [manager POST:urlString1 parameters:@{@"user":@"quiet",@"password":@"123"} success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *str =[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"str ===%@",str); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"erro == %@",error); }]; } -(void)testGetRequest { NSString *urlString =@"http://www.baidu.com"; urlString =@"http://m.weather.com.cn/data/101010100.html"; //定义AFNetworking管理 AFHTTPRequestOperationManager *manager =[AFHTTPRequestOperationManager manager]; //默认认为数据是JSON,content-type 也是JSON,responseObject 是解析的字典和数组。不是产生错误Code =-1016,解决:设置解析器为HTTP形式,下载回来是NSData. manager.responseSerializer =[AFHTTPResponseSerializer serializer]; [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { // NSLog(@"a ==%@",responseObject); NSString *str =[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"str ===%@",str); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"erro == %@",error); }]; }
12网络基础知识
(1)一次HTTP请求的完整过程(对于IOS开发很重要)
抓包。
(2)以打开百度网页为例,请求(get,post,delete,update). 请求包含HTTP类型(GET,POST),地址(URL),协议(HTTP、1.1),请求头部,附加信息;
页面分为两种页面,静态的HTML页面,动态PHP,ASP,JSP页面,数据通过响应response返回给浏览器以及应用。
(3)GET请求,POST请求
都是请求的一个方式,GET一般只是为了获取数据,而POST获取的同时上传附加数据;GET请求所有参数都在URL网址中,POST请求参数放在请求头中;
如果只是简单的获取数据,使用GET请求,登陆传密码,上传文件或图片使用POST请求。