当在实时搜索的需求中,只需要保留最新一次的数据时
1.
以AFNetworking为例,上我自己的网络请求封装主要代码:
//单例模式
+ (HttpManager *)sharedManager
{
static dispatch_once_t once;
dispatch_once(&once, ^{
httpManager = [[HttpManager alloc] init];
});
return httpManager;
}
//网络类初始化
- (id)init{
self = [super init];
if(self)
{
manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
}
return self;
}
2.
取消正在进行的网络请求: 在需要取消网络请求的地方调用此方法
不要每次请求的时候都去初始化manager(AFHTTPSessionManager)对象,tasks里面装的就是正在进行的网络请求
- (void)cancelRequest
{
if ([[HttpManager shareInstance].manager.tasks count] > 0) {
NSLog(@"返回时取消网络请求");
[[HttpManager shareInstance].manager.tasks makeObjectsPerformSelector:@selector(cancel)];
//NSLog(@"tasks = %@",manager.tasks);
}
}
manager里面的tasks装的就是正在执行的网络请求。执行cancel后,tasks就会清空,网络请求会进入失败的状态,然后响应failure block,得到一个error的信息,表示请求已经成功取消了。