当前位置: 首页 > news >正文

深圳代理网络推广公司企业网站seo方案

深圳代理网络推广公司,企业网站seo方案,网站建设专家北京注安,前端怎么在猪八戒网站接单做文章目录AFNetworking简介问题#x1f914;优化策略解决AFNetworking局限性使用单例进行网络请求的优势使用单例进行网络请求的风险最优使用使用参数讲解POST请求AFNetworking 简介 这篇文章旨在实现使用AFNetworking设置一个集中的单通道网络对象#xff0c;该对象与MVC组建… 文章目录AFNetworking简介问题优化策略解决AFNetworking局限性使用单例进行网络请求的优势使用单例进行网络请求的风险最优使用使用参数讲解POST请求AFNetworking 简介 这篇文章旨在实现使用AFNetworking设置一个集中的单通道网络对象该对象与MVC组建分离可以在整个解耦架构应用程序中重复使用 资料来源https://www.toptal.com/ios/afnetworking-tutorial-with-a-singleton-class?utm_sourcechatgpt.com 虽然苹果抽象的许多iOS SDK在管理移动硬件的许多复杂性方面做的很好但是在某些情况下为了保持SDK的灵活性使用会很复杂。AFNetworking作为开源框架之一简化了developer的日程任务。 他简化了RESTful API网络并创建了具有成功、进度、和失败的模块化请求/响应模式。消除了对开发人员实施的委托方法和自定义请求/连接设置的需求并且可以非常快速的包含在任何类中 问题 虽然AFN是一个功能强大、模块化的网络库但是也会存在一些低效实施。如下 分散的网络请求逻辑 单个视图控制器包含多个几乎相同的请求难以复用后期维护成本高如果API发生变更需要逐个排查所有使用的地方容易遗漏 共享状态混乱 一些通用参数可能分散在不同的控制器中容易出现不一致或者同步问题 职责分离不清 视图控制器承担了数据获取的职责导致控制器代码臃肿 拓展性不足 如果API发生版本化或者新增参数修改成本大 优化策略 集中化网络层设计 创建独立的NetworkManager或APIClient集中管理所有请求将通用的请求头、参数注入逻辑同意处理 抽象请求方法引入模型层 使用YY_Model等库将API响应解析为强类型模型对象控制器只关心模型不关心JSON结构 支持版本或者参数设置 在APIClient内部设计时预留一些字段 解决AFNetworking局限性 我们可以通过创建一个网络单例类来集中处理请求、响应以及其参数 苹果官方的原话“A singleton object provides a global point of access to the resources of its class. Singletons are used in situations where this single point of control is desirable, such as with classes that offer some general service or resource. You obtain the global instance from a singleton class through a factory method. – Apple“ 就是单例模式的介绍想了解的可以看笔者前面有关单例模式的文章 使用单例进行网络请求的优势 全局唯一是静态初始化。保证了所有类访问的都是同一个实例避免了因为不同实例不同步导致的奇怪bug同义API的调用和速率限制。单例可以集中管理请求队列和节流逻辑防止因多个视图控制器并发请求导致速率限制集中化配置管理重复利用公共属性。通用的请求头、超时设置、解析策略都能复用。延迟加载、节省内存。单例在第一次使用前不加载不占用内存解耦视图与网络层即使视图控制器销毁网络请求仍能继续避免了因为界面消失导致网络请求中断的问题统一日志与错误处理跨项目复用 使用单例进行网络请求的风险 可能承担过多职责我们在使用单例时每个单例应该只做一件事无法继承单例不能被子类化如果未来需要拓展不够灵活。可以通过使用协议和依赖注入提供可替换的实现共享状态可能被意外修改长时间持有大量数据不释放。可以定期清理缓存或者重置单例内部状态 最优使用 单一职责原则线程安全使用GCD或加锁轻量化存储单例只存放必要的全局设置支持依赖注入提供重置能力在必要时可以手动清空状态 使用 我们实现一个简单的GET请求来演示AFNetworking的效果 首先我们先为项目导入需要的AFNetworking第三方库这里的操作就略过了我们直接进入正文 创建单例类, 并实现GET方法 #import Foundation/Foundation.h #import AFNetworking.h NS_ASSUME_NONNULL_BEGINinterface NetworkManager : NSObject property (nonatomic, strong)AFHTTPSessionManager* sessionManager; (instancetype)sharedManager;- (void)GET:(NSString* ) URLString parameters:(nullable id)parameters headers:(nullable NSDictionaryNSString *,NSString * *)headers progress:(nullable void (^)(NSProgress * _Nonnull))downloadProgress success:(nullable void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success failure:(nullable void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure;endNS_ASSUME_NONNULL_END// Created by xiaoli pop on 2025/9/15. //#import NetworkManager.h static NetworkManager* sharedManager nil; implementation NetworkManager(instancetype)sharedManager {static dispatch_once_t onceToken;dispatch_once(onceToken, ^{sharedManager [[super allocWithZone:NULL] init];});return sharedManager; } (instancetype)allocWithZone:(struct _NSZone *)zone {static dispatch_once_t onceToken;dispatch_once(onceToken, ^{sharedManager [super allocWithZone:zone];});return sharedManager; }- (instancetype)init {if (self [super init]) {self.sessionManager [AFHTTPSessionManager manager];self.sessionManager.requestSerializer [AFJSONRequestSerializer serializer];self.sessionManager.requestSerializer.timeoutInterval 15.0;self.sessionManager.responseSerializer [AFJSONResponseSerializer serializer];self.sessionManager.responseSerializer.acceptableContentTypes [NSSet setWithObjects:application/json, text/plain, text/html, nil];}return self; }- (void)GET:(NSString *)URLString parameters:(id)parameters headers:(NSDictionaryNSString *,NSString * *)headers progress:(void (^)(NSProgress * _Nonnull))downloadProgress success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure {[self.sessionManager GET:URLString parameters:parameters headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {if (success) {success(task, responseObject);}} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {if (failure) {failure(task, error);}}]; }end 使用 NSString* str 安康;NSString* urlString [NSString stringWithFormat:https://api.weatherapi.com/v1/forecast.json?key8f123b0cdc654b149aa92217252607q%days3langzh,str];urlString [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];[[NetworkManager sharedManager] GET:urlString parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {NSLog(%, responseObject);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(error);}];我们对比一下原生的网络请求 - (void)creatURL {NSLog(!!!);NSString* str 安康;NSString* urlString [NSString stringWithFormat:https://api.weatherapi.com/v1/forecast.json?key8f123b0cdc654b149aa92217252607q%days3langzh,str];urlString [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];NSURL* url [NSURL URLWithString:urlString];NSURLRequest* request [NSURLRequest requestWithURL:url];NSURLSession* session [NSURLSession sharedSession];NSURLSessionTask* task [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if (!error data) {NSError* jsonError;NSDictionary* jsonDict [NSJSONSerialization JSONObjectWithData:data options:0 error:jsonError];if (!jsonError [jsonDict isKindOfClass:[NSDictionary class]]) {// NSLog(%, jsonDict);Model* model [Model yy_modelWithDictionary:jsonDict];NSLog(%, model.current[cloud]);NSLog(%, model);}} else {NSLog(ERROR: %, error);}}];[task resume]; }显而易见当我们使用一个单例类来处理网络申请时代码逻辑更清晰后期维护更方便 参数讲解 URL NSURL或者其字符串表示形式描述网络资源的地址制定了请求的目标位置 parameters 类型NSDictionary描述字典用于传递请求的参数在GET请求中这些参数会附加到URL字符串中以便于服务器根据这些参数返回对应数据 progress 类型通常是一个void(^)(NSprogress* downloadProgress)类型的块这个参数用于跟踪下载进度他接收一个NSProgress对象该对象包含了已下载的数据量、总数据量等信息。。可以在此实现更新进度条等操作不需要可以传nil headers NSDictionary用于设置HTTP请求头部信息。每个请求头都是一对键值对 success 类型void(^)NSURLSessionDataTask* task, id responseObject)类型的块请求成功后的回调块通常接受两个参数一个是包含响应数据的NSURLSessionDataTask对象一个是响应数据通常是一个NSDictionary或其他数据结构 failure 失败后的回调块第一个参数也是包含请求任务的NSURLSessionDataTask对象第二个参数是一个NSError对象包含了请求失败的信息 POST请求 在单例中 - (void)POST:(NSString *)URLString parameters:(id)parameters headers:(NSDictionaryNSString *,NSString * *)headers progress:(void (^)(NSProgress * _Nonnull))uploadProgress success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure {[self.sessionManager POST:URLString parameters:parameters headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {if (success) {success(task, responseObject);}} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {if (failure) {failure(task, error);}}]; }使用 - (void)LoginWithUsrname:(NSString* )username withPassword:(NSString* )password {NSString* urlString https://......./login;NSDictionary* parameters {username : username , password : password};[[NetworkManager sharedManager] POST:urlString parameters:parameters headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {NSLog(%, responseObject);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(%, error);}]; }APIURL是接口的基本路径而parameters是传给接口的查询参数或请求体AFNetworking会自动把parameters序列化并拼接到URL或者body前提是必须得有一个基础URL来承接这些参数
http://www.pierceye.com/news/451461/

相关文章:

  • 嘉兴网站建设培训合肥推广外包公司
  • 江苏建设厅网站查询国外网站推荐
  • 一个网站多久能做完湖南营销网站建设
  • sql网站开发徐州市住房建设局网站
  • 做网站的代码大学生网页设计心得体会
  • 浩方网络网站建设海安环评在哪个网站做
  • 吉林省建设厅证件查询网站网站不备案什么意思
  • 怎么查wordpress主题鞍山seo优化
  • 文字网站和图片网站哪个难做大城县建设局网站
  • 网站的二级目录是什么怎么把网站和域名绑定
  • 佛山营销网站建设wordpress请求超时
  • wordpress今天更新文章数漳州网站优化
  • 开发公司房产销售合同中必须明确哪些事项?seo网站推广全程实例
  • asp网站水印支除网络营销与市场营销的关系
  • 方圆网 网站建设wordpress 首页 不显示归档
  • 网站关键词怎么快速上排名wordpress极慢
  • 摄影网站建站wordpress怎么改密码
  • 旅游网站制作过程百度收录查询入口
  • 简述企业网站建设的流程网站建设的需求分析报告
  • 做网络课程的网站聚美优品网站建设分析
  • 网站建设公司简介wordpress注册按钮
  • 网站的栏目建设在哪里惠州网
  • 免费建站模板哪个好核酸造假7人枪毙视频
  • 一手房哪个网站做信息效果好微信小程序打不开
  • 建设网站图片素材包头怎样做网站
  • 网站内容建设与管理90设计app下载
  • 怎么做优惠卷网站公司做网站大概多少钱
  • 哪些网站是单页面应用程序在线做网站流程
  • 公司网站设计维护官方网站建设需要做哪些东西
  • 网站被k还能不能在百度做推广wordpress主题网址导航葬爱