标签:
dispatch_once
都用static修饰了下网络请求入口
的方法NSMachPort
端口,目的是为了让他里面有Source(因为有了Source的RunLoop才能真正跑起来)// 创建
// AFHTTPRequestOperationManager内部包装了NSURLConnection
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
id responseObject
这个参数,会自动帮你从服务器得到的JSON数据转为字典或者数组(用id就是因为不一定返回的是什么数据.所以要用到id);他的内部无非也就是一个Request对象NSError *error
返回的是错误信息- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
- (NSURLSessionDataTask *)GET:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
如果想解析XML数据,就需要手动把responseSerializer
的值改掉,就可以了
也就意味着这里的id responseObject
,这里需要换做NSXMLParser *parser
// 解析服务器返回的普通数据(直接使用 *服务器本来返回的数据* 不作任何解析)
mgr.responseSerializer = [AFJSONResponseSerializer serializer];
// 解析服务器返回的XML数据
mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];
// 解析服务器返回的JSON数据 (默认解析的是JSON可以不传)
mgr.responseSerializer = [AFJSONRequestSerializer serializer];
有时候,可能当用户在点击一个控制器的button在请求数据时候,会遇到网速慢,返回的数据特别慢,用户可能会等的不耐烦,然后退掉当前的控制器,但是这个请求是还存在着的,一旦请求返回,项目一定会崩溃.那么这种情况该怎么处理呢?
遇到这样的情况,可以先把AFNHTTPSessionManger
做一个属性
@property(nonatomic, strong)AFNHTTPSessionManger *manger
将所有的发请求的地方都用成
// 如果这样使用AFN,会把所有的请求都放入`manger.operationQueue`
self.manger POST/ GET
在- (void)dealloc
方法中调用
// 取消所有任务
self.manger.operationQueue cancelAllOperations
from:(文/Cstye)
标签:
原文地址:http://www.cnblogs.com/akiha/p/5747819.html