美文网首页ios开发专题
ios uiviewcontroller销毁的时候,http应该

ios uiviewcontroller销毁的时候,http应该

作者: zl520k | 来源:发表于2018-06-07 14:20 被阅读34次

    在我们开发过程中,经常遇到当控制器销毁的时候,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];

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

    相关文章

      网友评论

        本文标题:ios uiviewcontroller销毁的时候,http应该

        本文链接:https://www.haomeiwen.com/subject/eulgsftx.html