Alamofire是原AFNetworking团队针对Swift语言封装的网络请求库,相较于AF基本不存在内存泄漏的问题。最新版是Alamofire5最低支持系统为iOS10,具体可参考文章:Alamofire 5 的使用 - 基本用法。针对AF框架存在的内存泄漏解决方案,博客园有很多文章,尤其是文件、图片上传导致的内存泄漏。具体可参考:[AFHTTPSessionManager manager]内存泄漏解决。
下面就将Alamofire 在PUT、POST请求下body 传值以及图片、文件上传的调用简单二次封装列出如下,供参考和学习使用:
- Alamofire PUT/POST方式请求,body传参实例:
/**!
* post 接口请求
* @para strUrl String 请求地址
* @para body Data? 请求参数
* @para successBack 成功回调
* @para failureBack 失败回调
*/
func postRequestWithBodyFor(strUrl:String,
withBody body:Data?,
AndSuccessBack successBack:@escaping SuccessBlock,
AndFailureBack failureBack:@escaping FailureBlock,
WithisLoading isLoading:Bool = true) {
if body != nil {
print("请求地址:\(strUrl),参数:\(NSString.init(data: body!, encoding: String.Encoding.utf8.rawValue) ?? "暂无参数")")
}
else{
print("请求地址:\(strUrl),暂无参数")
}
if isLoading == true {
SVProgressHUD.showLoading()
}
var request = URLRequest.init(url: URL.init(string: strUrl)!)
request.httpBody = body
request.httpMethod = "POST"
request.timeoutInterval = K_APP_REQUEST_TIME_OUT
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.setValue("application/json;charset=UTF-8", forHTTPHeaderField: "Content-Type")
Alamofire.request(request)
.validate()
.validate(contentType: K_APP_ACCEPTABLE_CONTENTTYPES)
.responseJSON { response in
if isLoading == true {
SVProgressHUD.dismissLoading()
}
var msg:String? = response.error?.localizedDescription ?? "请求数据不存在"
self.errorHandle(Error: response.error as NSError?,
statusCode: response.response?.statusCode,
andErrormsg: &msg)
print("请求结果ÿ