AFNetworking 和自动建议

Posted

技术标签:

【中文标题】AFNetworking 和自动建议【英文标题】:AFNetworking and auto-suggest 【发布时间】:2011-12-21 11:49:38 【问题描述】:

我正在为我的 ios 应用程序使用 AFNetworking。 我需要像许多其他应用程序或网站上的搜索栏一样实施搜索建议。 因此,基本上启动 GET 请求,但在用户点击新字符时取消旧请求。 我怎样才能做到这一点?我有一个 AFHTTPClient 子类,我正在使用 getPath。 最好的办法是让这些请求可取消并优先于我的单例 AFHTTPClient 子类上的任何其他 HTTP 请求。 提前致谢。

【问题讨论】:

【参考方案1】:

只需在您的 AFHTTPClient 中使用此方法

- (void)cancelHTTPOperationsWithMethod:(NSString *)method andURL:(NSURL *)url

如果您在 AFHTTPClient 子类上有单例,请举例:

[[MHHTTPClient sharedHTTPClient] cancelHTTPOperationsWithMethod:@"GET" andURL:[NSURL URLWithString:@"http://www.mysite.com/autocomplete.json?search=tes"]];

【讨论】:

【参考方案2】:

我相信 AFNetworking 中最好的 HTTPClient 在您尝试创建基于特定服务的应用程序时使用,它将向同一主机上的不同路径发出请求。

对于这样的东西,我会使用普通的 AFHTTPRequestOperation,它是可取消的。我会制作一个包含 AFHTTPRequestOperation 的包装类。然后,在每次用户按下时,我都会在 http 请求(和我的包装器)上调用“取消”,然后在同一个地方创建一个新请求,并发出新请求。这就是我已经在我的应用程序中实现它的方式,并且效果很好。

不过要小心。 AFNetworking 很大程度上基于 NSOperation 块,当调用 cancel 时,您必须确保 NSOperation 的完成块不会被调用(或者至少在它被调用后会立即返回)。即使取消操作,完成块仍有可能被调用,从而造成内存泄漏和难以跟踪的错误。最好的办法是创建一个完成块并在继续之前检查操作是否被取消。

【讨论】:

以上是关于AFNetworking 和自动建议的主要内容,如果未能解决你的问题,请参考以下文章

使用 SDWebImage 而不是 AFNetworking 进行图像加载有很大的优势吗?

如何使用 AFNetworking 设置超时

使用 AFNetworking 自动刷新令牌的最佳解决方案?

AFNetworking 3.0迁移指南

AFNetworking 3.0迁移指南

AFNetworking 3.0迁移指南