SEL didStartSelector;
SEL didReceiveResponseHeadersSelector;
SEL willRedirectSelector;
SEL didFinishSelector;
SEL didFailSelector;
SEL didReceiveDataSelector;
各种SEL 的调用时机。
1: SEL didStartSelector;
- (void)startRequest 一开始就调用了requestStarted。
[self performSelectorOnMainThread:@selector(requestStarted) withObject:nil waitUntilDone:[NSThread isMainThread]];
/* ALWAYS CALLED ON MAIN THREAD! */
- (void)requestStarted
{
if ([self error] || [self mainRequest]) {
return;
}
if (delegate && [delegate respondsToSelector:didStartSelector]) {
[delegate performSelector:didStartSelector withObject:self];
}
if (queue && [queue respondsToSelector:@selector(requestStarted:)]) {
[queue performSelector:@selector(requestStarted:) withObject:self];
}
#if NS_BLOCKS_AVAILABLE
if(startedBlock){
startedBlock();
}
#endif
}
2: SEL didReceiveResponseHeadersSelector;
/* ALWAYS CALLED ON MAIN THREAD! */
- (void)requestReceivedResponseHeaders:(NSMutableDictionary *)newResponseHeaders
{
if ([self error] || [self mainRequest]) {
return;
}
if (delegate && [delegate respondsToSelector:didReceiveResponseHeadersSelector]) {
[delegate performSelector:didReceiveResponseHeadersSelector withObject:self withObject:newResponseHeaders];
}
if (queue && [queue respondsToSelector:@selector(request:didReceiveResponseHeaders:)]) {
[queue performSelector:@selector(request:didReceiveResponseHeaders:) withObject:self withObject:newResponseHeaders];
}
#if NS_BLOCKS_AVAILABLE
if(headersReceivedBlock){
headersReceivedBlock(newResponseHeaders);
}
#endif
}
3: SEL willRedirectSelector;
/* ALWAYS CALLED ON MAIN THREAD! */
- (void)requestWillRedirectToURL:(NSURL *)newURL
{
if ([self error] || [self mainRequest]) {
return;
}
if (delegate && [delegate respondsToSelector:willRedirectSelector]) {
[delegate performSelector:willRedirectSelector withObject:self withObject:newURL];
}
if (queue && [queue respondsToSelector:@selector(request:willRedirectToURL:)]) {
[queue performSelector:@selector(request:willRedirectToURL:) withObject:self withObject:newURL];
}
}
SEL requestFinished
/* ALWAYS CALLED ON MAIN THREAD! */
- (void)reportFinished
{
if (delegate && [delegate respondsToSelector:didFinishSelector]) {
[delegate performSelector:didFinishSelector withObject:self];
}
if (queue && [queue respondsToSelector:@selector(requestFinished:)]) {
[queue performSelector:@selector(requestFinished:) withObject:self];
}
#if NS_BLOCKS_AVAILABLE
if(completionBlock){
completionBlock();
}
#endif
}
SEL requestFailed
/* ALWAYS CALLED ON MAIN THREAD! */
- (void)reportFailure
{
if (delegate && [delegate respondsToSelector:didFailSelector]) {
[delegate performSelector:didFailSelector withObject:self];
}
if (queue && [queue respondsToSelector:@selector(requestFailed:)]) {
[queue performSelector:@selector(requestFailed:) withObject:self];
}
#if NS_BLOCKS_AVAILABLE
if(failureBlock){
failureBlock();
}
#endif
}
分享到:
相关推荐
4. **进度回调**:ASIHttpRequest提供了下载和上传进度的回调接口,开发者可以利用这些接口实时更新UI,显示下载或上传的进度,让用户了解任务状态。 5. **错误处理**:ASIHttpRequest提供了丰富的错误处理机制,当...
综上所述,ASiHTTP.zip的内容可能包括ASiHTTP库的源码和示例,供开发者学习如何在ARC环境下解决兼容性问题,或者如何将其转换为静态库以避免这些问题。对于初学者或有经验的iOS开发者来说,理解ARC的工作原理,以及...
其次,ASIHTTP 提供了进度回调机制,可以方便地跟踪下载进度。在`ASIHTTPRequest`中,你可以设置`requestDidReceiveBytes:`和`requestDidFinish:`代理方法,或者监听`downloadProgressDelegate`属性,以实时更新下载...
2. **设置请求头**:可以添加自定义请求头,例如`[request setHeaderValue:@"application/json" forHTTPHeaderField:@"Content-Type"]`。 3. **发送POST数据**:可以方便地附加POST参数,`[request appendPostData:...
4. **处理cookies**:ASIHTTP自动处理服务器返回的cookies,可以通过`- (void)addCookie:(NSHTTPCookie *)cookie`手动添加cookie,或者通过`- (NSArray *)cookies`获取当前请求的所有cookies。 5. **请求队列管理**...
在iOS开发中,实现多个下载任务是常见的需求,特别是在处理数据量大或者用户需要离线浏览的情况下。本项目使用了ASIHTTPRequest库与UITableView相结合来实现这一功能。...而UITableView则是iOS中用于展示列表数据的组件...
可以使用`-setCompletionBlock:`方法设置下载完成后的回调,在这里处理图片的保存和显示。 ```objc request.completionBlock = ^{ UIImage *image = [UIImage imageWithData:request.responseData]; // 保存图片...
利用ASIHttp第三方库,,获取网络请求,,获得天气预报,,,代码显示天气预报效果默认是河南郑州,,亲们可以自己输入并查询自己想知道的城市天气情况,,堪比真机天气
在iOS开发中,ASIHTTP和JSON是两个非常重要的技术组件,常常用于网络数据的请求与解析,而Google地图API则提供了强大的地图展示功能。在这个"ASIHTTP+JSON+Google地图,多线程实现加载DEMO"中,我们将探讨如何将这些...
ASIHTTPRequest的详细介绍还包括 同步 异步 缓存 请求网络数据与传输数据
例如,`[request setDownloadProgressDelegate:delegate]` 和 `request setUploadProgressDelegate:delegate]` 分别用于设置下载和上传进度的回调代理。 5. **请求头和HTTP方法**:ASIHTTPRequest支持自定义HTTP头...
4. **进度回调**: 提供了请求进度的回调函数,可以实时更新下载或上传的进度。 5. **自定义头信息**: 允许设置自定义的HTTP头字段,以适应各种服务器需求。 6. **请求取消**: 支持在运行时取消正在进行的请求。 7. *...
整理的一些市面上常见的第三方类库,快速集成可以方便开发,这些都是大家常用的。 里面包含: GTM 各种加密 ASIHttp http请求 KissXml xml解析 json oc版 json cpp版 Reachabiliy 网络状态判断 libcurl c语言静态...
使用block可以简化回调函数的编写,使代码更简洁。 ```objective-c ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://example.com"]]; [request setCompletionBlock:^{ /...
XMLParserSDK是一个解析XML数据的工具,它提供了基于事件驱动的解析方式,即当解析器遇到XML文档中的特定元素时,会触发相应的回调函数。 使用XMLParserSDK解析XML数据的基本流程: 1. 初始化解析器:创建`...
使用ASIHttp的优点包括异步请求处理、支持上传和下载进度回调、以及自动处理cookies。然而,需要注意的是,尽管ASIHttp在过去的开发中非常流行,但由于其不再维护,开发者现在更倾向于使用Apple的URLSession或第三方...
ASIHTTP库是一个经典的Objective-C编写的网络请求框架,主要用于iOS和Mac OS X平台。这个库在iOS开发领域曾经非常流行,特别是在HTTP请求处理方面,它提供了简单易用的API,支持GET、POST等多种HTTP方法,同时也包含...
3. 设置回调:可以通过代理方法或者block来设置请求完成、失败、进度等回调。 4. 添加请求头:可以使用`-[ASIHttpRequest setRequestHeader:forKey:]`添加自定义请求头。 5. 设置请求体:对于POST请求,可以使用`-...
然而,异步操作需要更复杂的管理,因为它涉及到回调函数或闭包来处理完成后的结果。 ASIHTTP是一个Objective-C编写的HTTP客户端库,它支持同步和异步请求。ASIHTTPRequest类提供了丰富的功能,如缓存、请求队列管理...
在网络访问时,一般都建议用异步访问,但是异步访问的话,需要传入delegate,并处理回调。不利于将所有的网络访问的方法集中到一个类中,所以我采用同步访问的方式。后来产品部们要求网络访问可以取消,但是ASIHTTP ...