- NSURLSessionConfiguration 对象可以保存公共设置,最好将该对象放入一个单例对象或者上下文环境中,使其全局可见
//创建默认配置对象
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
//设置请求头。
//config.HTTPAdditionalHeaders = @{@"apiKey":@"nil"};
//还可以设置无痕配置,以及后台运行的配置等等。可以根据自己需求配置
//配置设置完成后用配置对象创建会话对象,此处的委托可以通过回调其协议里的方法处理响应的事件(发生错误,后台传输完成,身份验证等)。
NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
//1.通过字符串(网址)创建统一资源定位符
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com";
//2.用统一资源富创建网络请求
NSRequest *req = [NSRequest requestWithURL:url cachePolicy:0 timeOutInterval:5];
//3.用会话对象的单例模式创建网络请求会话
NSURLSession *session = [NSURLSession sharedSession];
//4.通过会话创建一个获得数据的任务
NSURLSessionDataTask *task = [session dataTaskWithRequest:req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (!error) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:1 error:nil];
for (NSDictionary *albumDict in dict[@"albums"]) {
//通过YYModel将字典装成模型对象
LHModel *model =[LHModel yy_modelWithDictionary:albumDict];
[dataArray addObject:model];
}
//模型对象准备就绪后刷新表格视图
//苹果官方规定:刷新界面的代码要再主线程中执行
//否则界面可能无法刷新 因此下面的代码要回到主线程执行
//写法一: GCD 异步派发(将代码发配到主线程中执行)
//dispatch_async(dispatch_get_main_queue(), ^{
// [myTableView reloadData];
//});
//写法二:NSOperation和NSOperationQueue 操作队列
//创建一个操作对象封装要执行的代码
NSOperation *op = [NSBlockOperation blockOperationWithBlock:^{
[myTableView reloadData];
}];
//将操作放到主队列(主队列中的操作在主线程中执行)中执行
[[NSOperationQueue mainQueue] addOperation:op];
}
else{
NSLog(@"error = %@",error);
}
}];
//将任务挂起、暂停、取消(suspend cancel);
[task resume];
- 网络中常用的对字符串操作的方法
- 有时统一资源定位符可能会出现中文参数需将中文字符转换为百分号编码的字符
[NSString stringWithByAddingPrecentEscapesUsingEncoding:NSUTF8StringEncoding];
- 在输入密码、账号等操作时可能需要去掉字符串两边的空格字符
[NSString stringByTrimmingCharacterInset:[NSCharacterInset whitespaceCharacterInset]];
- 追加、重组、截取等就不在此一一举例了
- 单例的创建以及用单例保存全局变量
- 1.废除原有的初始化方法。
-(instancetype) init {
@throw [NSException exceptionWithName:@"" reason:@"不能调用init方法初始化CDUserManager对象" userInfo:nil];
}
//str 为需要放入单例中的变量。
-(instancetype) initPrivate {
if (self = [super init]) {
_str = [NSString string];
}
return self;
}
- 2.用私有的初始化方式创建对象
+(instancetype) sharedUser {
static LHSharedUser *user = nil;
@synchronized (self) {
if (!user) {
user = [[self alloc] initPrivate];
}
}
return user;
}
网友评论