欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS开发中如遇到频繁的Http请求,如何取消之前已经发送的Http请求?

程序员文章站 2022-07-28 20:38:30
iOS开发中如遇到频繁的Http请求,如何取消之前已经发送的Http请求? 以上面的代码段为例,他是这么操作的 主要精髓在于 第一点:不要initialize a newAF...

iOS开发中如遇到频繁的Http请求,如何取消之前已经发送的Http请求?

以上面的代码段为例,他是这么操作的

主要精髓在于

第一点:不要initialize a newAFHTTPSessionManager object everytime 一定要把manager用成全局的

第二点:把请求返回的task对象丢进数组,下次触发的时候把遍历数组,把之前的所有任务[task cancel]

  1. //somewhereinyourclass,let'ssayinViewDidLoadyoushouldinittheAFHTTPSessionManagerobject
  2. -(void)viewDidLoad{
  3. [superviewDidLoad];
  4.  
  5. ///createtheAFHTTPSessionManagerobject,we'regonnauseitineveryrequest
  6. self.manager=[[AFHTTPSessionManageralloc]init];
  7. self.manager.responseSerializer=[AFJSONResponseSerializerserializer];
  8.  
  9. ///createanarraythatisgoingtoholdtherequeststaskwe'vesenttotheserver.sowecangetbacktothemlater
  10. self.arrayOfTasks=[NSMutableArraynew];
  11. ///discussion:
  12. ///anarrayholdsmultipleobjects.ifyoujustwanttoholdareftothelatesttaskobject
  13. ///thencreateapropertyofNSURLSessionDataTaskinsteadofNSMutableArray,andletitpointtothelatestNSURLSessionDataTaskobjectyoucreate
  14.  
  15. }
  16.  
  17.  
  18.  
  19. -(BOOL)textField:(UITextField*)textFieldshouldChangeCharactersInRange:(NSRange)rangereplacementString:(NSString*)string;{
  20. ///yourcodegoeshere
  21. ///.....
  22. ///.....
  23. ///.....
  24. ///.....
  25. ///tillwereach
  26. if(stringLength>=3){
  27. ///cancelallprevioustasks
  28. [self.arrayOfTasksenumerateObjectsUsingBlock:^(NSURLSessionDataTask*taskObj,NSUIntegeridx,BOOLBOOL*stop){
  29. [taskObjcancel];///whensendingcanceltothetaskfailure:blockisgoingtobecalled
  30. }];
  31.  
  32. ///emptythearraOfTasks
  33. [self.arrayOfTasksremoveAllObjects];
  34.  
  35. ///initnewtask
  36. NSURLSessionDataTask*task=[self.managerGET:urlStringparameters:nilsuccess:^(NSURLSessionDataTask*task,idresponseObject){
  37. ///yourcode
  38. }failure:^(NSURLSessionDataTask*task,NSError*error){
  39. ///yourcode
  40. }];
  41.  
  42. ///addthetasktoourarrayOfTasks
  43. [self.arrayOfTasksaddObject:task];
  44. }
  45. returnYES;
  46. }