ios开发专题

ios uiviewcontroller销毁的时候,http应该

2018-06-07  本文已影响34人  zl520k

在我们开发过程中,经常遇到当控制器销毁的时候,http应该取消的情况,实际上,很多人都没有注意到,当控制器销毁的时候,请求并没有取消,导致数据显示异常的情况。

我使用的基本afnetworking框架进行封装的,其中区分get和post请求,使用字符串分离的方法,进行区分是get和post方法。封装网络请求方法。

首先,先“@”分离字符,因为apiPath=@“login@get”或者apiPath=@“login@post”进行区分的

NSArray *array = [apiPath componentsSeparatedByString:@“@”];

然后在

- (NSURLSessionTask*)requestData:(NSString*)apiPath

                           parent:(BaseViewController*)parent

                            param:(NSDictionary*)param

                            class:(Class)class

                          success:(HttpResponseSuccess)success

                           failed:(HttpResponseFail)failed{

进行调用afnetworking的函数

}

这个函数中,要session = [[HttpManagesharedInstance].managerGET:urlparameters:dicprogress:^(NSProgress*_NonnulldownloadProgress),这个session要保存在当前类的数组中,当请求完成时候,要记得,从当前数组中把这个session变量移除了,同时要创建一个NSObject的分类,进行同步取消的,其中注意,这个session也要保存NSObject创建的分类中数组保存,当在请求完成时,也要在分类中去掉这个session,取消的时候,要这样写

[temp.arrayenumerateObjectsUsingBlock:^(HttpCancelRequest*_Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop) {

            NSURLSessionTask*task = obj.request;

            if(task.taskIdentifier== sess.taskIdentifier){

                *stop =YES;

                if(*stop ==YES) {

                    [temp.arrayremoveObject:obj];

                }

            }

        }];

如果不这样写,会造成数据移除不同步,这个block自动做了数据同步。

在分类中,要重新- (void)dealloc{

    [self cancelAllRequest];

}这个方法。这个只是一个思路,因为目前项目中,正在使用,不方便开源。

上一篇下一篇

猜你喜欢

热点阅读