Sri*_*lli 20 mobile-application nsurlconnection nsurlsession alamofire
任何人都可以帮助我理解这些问题:使用Alamofire而不是NSURLSession/NSURLConnection有什么好处?
NSURLSession和NSURLConnection有什么区别?
Mar*_*aek 13
NSURLConnection是Apple用于进行网络连接的旧API(例如,发出HTTP请求和接收响应),而NSURLSession是他们的新API.后者是更高级别,并且通常更容易,并且涉及更少的样板代码以供大多数应用程序开发人员使用 - 除了您不想更新的遗留代码之外,基本上没有理由使用前者.
一点点历史回顾:NSURLSession出来之前,第三方库,AFNetworking,成为这样做的目标C网络事实上的标准,因为它提供了比NSURLConnection的一个更简单,更方便的API(这大约是一个包装 - 我想这些天它包装NSURLSession而不是).同一个开发人员后来为Swift创建了一个类似的库,称为AlamoFire,以便充分利用"Swift的做事方式"(而不是仅仅将Swift绑定添加到AFNetworking).大约在同一时间NSURLSession问世,看起来很明显Apple已经受到了AFNetworking的启发,并希望让他们的新网络API同样方便使用 - 总的来说我认为他们成功了.这意味着,虽然以前使用AFNetworking而不是NSURLConnection的是唯一明智的选择,对于大多数开发者,今天使用AFNetworking或AlamoFire在NSURLSession的优势要小得多,对于大多数开发商启动新项目,我建议只首先使用NSURLSession,如果他们觉得他们遇到了一些足以证明添加另一个依赖项的限制或不便,那么只能查看AlamoFire.
首先我来回答一下NSURLSession和NSURLConnection的区别
NSURLConnection :如果我们与 NSURLConnection 建立了开放连接,并且假设您关闭了应用程序,那么我们收到或发送的所有内容都会丢失
NSURLSession:这里借助应用程序委托方法来处理这种情况
application:handleEventsForBackgroundURLSession:completionHandler
这是我发现的一个链接,可能有助于更好地解释两者之间的区别
让我们来讨论您最初的问题,即 Alamofire 相对于默认框架类的优势,我只是分享我迄今为止所做的经验,所以请做好准备,因为它是一个很长的阅读。
对我来说,经验法则永远不会绕过框架,除非你有充分的理由这样做,无论你使用什么技术。
背后的原因是我过去使用过第三方库,但随着 iOS 的最新更新,情况并没有好转,假设你有一个付费应用程序,而你的第三方库停止工作,那么你的客户的应用程序将失去它的价值,最终会在应用商店中收到负面评论。
我建议在使用任何第三方库之前请确保检查给定的问题
回到这个问题,我在一个项目中使用了 Alamofire,该项目只是进行 get、post 和 put 调用,并具有一些离线同步功能。
现在想想,我可以用 URLSessions 创建自己的类并相应地处理响应,不需要使用 Alamofire,因为我在这里没有做任何特别的事情。
我相信这一切都可以通过默认框架来实现,而不是使用第三方,但无论如何我都使用了它。我为什么使用它不知道也许我很好奇,但这里学到的一个教训是我可以通过使用框架类来实现同样的事情,如果假设库停止工作我将不知道为什么它会这样做并且会必须依赖该库的管理员/作者的修复,这可能需要一个月、一周、一天谁知道
有一次我使用了一个库来实现我想要的功能,但该功能有一个开放缺陷,并且从未更新过,所以我最终制作了自己的定制库,直到今天它工作正常,所以请仔细检查所有开放缺陷部分避免计划外的意外。
另外,正如上面的答案中提到的,仅当您遇到默认框架的限制时才使用第三方组件,甚至在您这样做之前,请检查该库最后一次更新是什么时候,它拥有什么许可证以及有多少开放缺陷在那儿。
小智 5
Alamofire 建立在 NSURLSession 之上,与(POST/GET/PUT/etc)进行 REST 交互的代码行更少。它会让你完成“90%”的工作,但是如果你需要进行超级专业的网络调用,你将需要使用 NSURLSession。
例如:获取 JSON 的简单 Alamofire 调用
Alamofire.request(.GET, "https://www.google.com/",encoding: .JSON).responseJSON {response in
if(response.result.error == nil){
print(response.data)
}else{
print("Network Error")
}
}
Run Code Online (Sandbox Code Playgroud)
NSURLConnection 现在已被弃用,NSURLSession 是新标准。 https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html
| 归档时间: |
|
| 查看次数: |
7606 次 |
| 最近记录: |