[IOS]网络开源库使用,MKNetwork

最新MkBlog主题源码v2.4.0版+WordPress内核 推荐配置:AMH + PHP8.1 + Mysql5.7!注意:仅适用于WordPress程序。2022/11/04 v 2.4.0 已推送新版本更新。更多小功能等你发现!附录:mkBlog 主题更新日志。 阅读详情

什么是 MKNetworkKit?

MKNetworkKit 是一个用objective-c写的网络库,具有无缝连接,基于block,ARC支持以及易用等特点。

MKNetworkKit的灵感来自于其他两个流行的网络库:ASIHTTPRequest和AFNetworking,结合了两个库的共同特点,并且有一些新的特性。除此之外,MKNetworkKit可能会比其他网络库而言为了代码的清晰性,要求你写一丁点多的代码。用了MKNetworkKit,你很难写出丑陋的网络代码。

特性

超轻量级

The complete kit is just 2 major classes and some category methods. This means, adopting MKNetworkKit should be super easy.

完整的库只有2个主类和一些category方法。也就是说,采用MKNetworkKit是非常容易的。

整个应用共享单一队列

严重依赖网络连接的应用应该优化他们的网络并发连接数。十分不幸的是,现在还没有网络库可以正确的完成这些功能。让我来举个例子说明如果你不去优化或者控制网络的并发连接数会发生什么。

Let’s assume that you are uploading a bunch of photos (think Color or Batch) to your server. Most

假如你正在上传一系列的图片(比如Color和 Batch)到服务器。大多数的移动网络(3G)不允许一个给定的IP地址超过两个的并发的http请求。这就是说,在你的设备上,3G网络下,你不能同时打开超过两个的并发HTTP请求。EDGE网络就更差了,大多数情况下你甚至不能打开超过一个的连接。这个限制在传统的wifi的情况下是相当高的(6个)。但是,你的设备并不总是连接到Wifi下,你应该为受限制的网络环境考虑。在最普通的情况下你的设备都是连接到3G网络,就是说你被限制同时只能上传2张图片。现在问题的关键不是上传两张图片时很慢,而是当你上传图片时再打开一个新的View,这个view在加载图片的缩略图的时候。当你不去通过app控制正确的队列大小时,你的缩略图加载操作就会超时,这种现象可不是正确的。正确的做法是把缩略图的加载排好优先级,或者等待上传完成后再加载缩略图。这就要求你的app有一个全局的队列。MKNetworkKit自动的保证你的app的每一个队列的实例使用单一的共享队列。虽然MKNetworkKit自己不是单例的,但是他的共享队列是。

正确的显示网络连接的标志

现在有许多第三方的类使用记录网络调用的次数的方式来控制网络链接标志的显示。但MKNetworkKit使用的是单一共享队列原则来控制网络标志的显示,即通过KVO注册共享队列里正在运行的操作。作为一个开发者,妈妈再也不用担心手动设置网络连接标志的问题了。

  if (object == _sharedNetworkQueue && [keyPath isEqualToString:@"operationCount"]) {

        [UIApplication sharedApplication].networkActivityIndicatorVisible =
        ([_sharedNetworkQueue.operations count] = 0);
    }
Auto queue sizing 自动队列大小

我们继续前一个讨论。我说了移动网络不允许同时超过两个并发网络请求。所以当3G网络时你的队列大小应该设为2,MKNetworkKit自动为你处理这些。当网络进入3G/EDGE/GPRS时,它会更改并发连接的数目为2,并且在连接wifi时自动设置回6。有了这个特性,你会看到当你通过3G网络从服务器加载缩略图(或者多个小的请求)时有巨大的性能提升

Auto caching 自动缓存

MKNetworkKit可以自动缓存你的所有GET请求。当你发起同样一个请求的时候,MKNetworkKit会立即用缓存的响应(如果有)来调用完成方法,也会向远程服务器发出一个请求。当服务器的数据返回以后,会用取到的新的相应再次调用完成方法。这就是说,你不需要手动的处理缓存,你需要做的,就只有调用这个方法:

[[MKNetworkEngine sharedEngine] useCache];

当然,你也可以在你的MKNetworkEngine子类中定制缓存的目录和内存缓存的消耗量。

Operation freezing 操作冻结

用了MKNetworkKit,你就拥有了冻结网络操作的能力。当你冻结一个操作的时候,为了防止网络连接丢失,操作会被自动序列化并且在设备联网之后自动执行。想想微博客户端的草稿箱功能。

当你发送一条微博时,把这个网络操作标记为冻结,MKNetworkKit会自动的处理冻结和解冻工作!然后这条微博你不用写一行代码就会自动稍后发送。你可以使用在比如标记一条微博为喜欢或者从google reader客户端分享一篇文章或者添加一个连接到instpaper等类似场景中。

Image Caching 图片缓存

MKNetworkKit可以无缝的缓存缩略图。通过重写几个方法,你可以设置缓存多少张图片在内存缓存以及缓存的目录。重写这些方法完全是可选的。

Performance 性能

一个词:速度。MKNetworkKit的缓存是无缝的,就像NSCache一样工作,除此之外,当内存警告的时候,内存缓存会写入到缓存目录中。

Full support for Objective-C ARC 全面支持Ojbective-C ARC

一般你会为新的项目选择一个新的网络库。MKNetworkKit不是为了取代你现有的(当然你也可以取代,但是可能会很麻烦)。在新的项目中,你会很想要使用ARC功能。MKNetworkKit可能是唯一全面支持ARC的网络库。基于ARC管理的代码速度可能比非ARC的代码是数量级的差距。

How to use 如何使用

OK,不自吹了,让我们来看看如何使用这个framework。

Adding the MKNetworkKit  添加MKNetworkKit

  1. 拖拽MKNetworkKit的目录到你的工程里
  2. 添加 CFNetwork.Framework, SystemConfiguration.framework and Security.framework 依赖库
  3. 在PCH文件中包含 MKNetworkKit.h
  4. 删除 NSAlert+MKNetworkKitAdditions.h如果你开发的是iOS程序。
  5. 删除 UIAlertView+MKNetworkKitAdditions.h如果你开发的是Mac程序。

就是这样子,仅仅5个核心文件,妈妈再也不用担心网络请求了。

 MKNetworkKit 中的类

  1. MKNetworkOperation
  2. MKNetworkEngine
  3. 混杂的帮助类 (苹果的 Reachability) 以及一些cateogory方法。

我相信简洁就是美。苹果已经把实际网络操作的繁重工作都做了,所以第三方的网络库应该提供的就是一个优雅的队列和可选的缓存。我坚信,任何第三方的库都应该少于10个类(不管是网络库还是UIkit的替代库)。多过10个,就是过度。Three 20库就是一个臃肿的例子,ShareKit也是,也许这两个库不错,但是仍然是庞大而且臃肿的。ASIHttpRequest或者AFNetworking比RESTKit而言都是轻量级的,JSONKit比起TouchJSON(或者其他任何TouchCode库)就是轻量级的。也许就我一个人喜欢这样子,但我就是不能忍受我的app里有第三方的库比我的代码还要多。

巨大的库的问题就在于很难去理解他的内在的工作机制,而且很难去根据自己的需求定制。我的添加IAP的MKStoreKit库就是超级易用的而且我相信MKNetWorkKit也是如此。使用MKNetworkKit,你只需要知道MKNetworkOperation 和 MKNetworkEngine两个类所暴露出来的方法。MKNetworkOperation类似于ASIHttpRequest类,是一个NSOperation的子类并且封装了请求相应类。你需要为你的app的每一个网络请求创建一个MKNetworkOperation。

MKNetworkEngine是一个假单例的类,负责管理你的app的网络队列。因此,简单的请求时,你应该直接使用MKNetworkEngine的方法。在更为复杂的定制中,你应该集成并子类化它。每一个MKNetworkEngine的子类都有他自己的Reachability对象来通知服务器的连通情况。你应该考虑为你的每一个特别的REST服务器请求子类化MKNetworkEngine。因为是假单例模式,每一个单独的子类的请求,都会通过仅有的队列发送。

你可以在应用的delegate里面retain MKNetworkEngine的实例,就像CoreDatademanagedObjectContext类。当你使用MKNetworkKit的时候,你创建一个MKNetworkEngine的子类来从逻辑上分组你的网络请求。就是说,Yahoo相关的请求都在一个类中,Facebook相关的请求都在另一个类中。我们会看到3个不同的使用库的例子。

 

例1:

让我们创建一个YahooEngine来获取雅虎财经的货币交换率。

第一步: 创建一个YahooEngine 继承自 MKNetworkEngine. MKNetworkEngine的初始化方法需要主机名和自定义的header(如果有)。自定义的头是可选的而且可以为nil,如果你正在编写自己的REST服务器(不是现在的情况)你可能需要考虑添加客户端版本以及其他类似客户端标识的元数据。

    NSMutableDictionary *headerFields = [NSMutableDictionary dictionary];
    [headerFields setValue:@"iOS" forKey:@"x-client-identifier"];

    self.engine = [[YahooEngine alloc] initWithHostName:@"download.finance.yahoo.com"
                       customHeaderFields:headerFields];

注意,雅虎不需要你发送x-client-identifider在header里面,所以上面的例子仅仅是为了演示这个功能特性。

既然代码都是ARC的,那么是否对Engine的实例进行strong引用取决于开发者。

当你创建一个MKNetworkEngine子类,Reachability的会自动实现。这样当服务器宕机或者其他不可预料的情况下时,请求会被自动的队列或者冻结。想要获取更多关于冻结操作的信息,请阅读后面冻结操作相关的章节。

步骤 2:设计 Engine 类 (分离考虑)

让我们开始在YahooEngine里面编写获取货币交换率的代码。Engine里面的方法会在ViewController里面调用。一个好的设计实践就是确保你的Engine类不会暴露URL和http的请求头给调用的类。你的View层不应该知道url路径以及需要的参数,就是对应着YahooEngine里面的货币及以及货币单位。返回的数据可以为double值表示货币交换率或者时间戳。因为请求都是异步的,你应该在block里面返回这些值,比如:

-(MKNetworkOperation*) currencyRateFor:(NSString*) sourceCurrency
                   	    inCurrency:(NSString*) targetCurrency
			  onCompletion:(CurrencyResponseBlock) completion
        	               onError:(ErrorBlock) error;

MKNetworkEngine父类定义了block的类型如下:

typedef void (^ProgressBlock)(double progress);
typedef void (^ResponseBlock)(MKNetworkOperation* operation);
typedef void (^ErrorBlock)(NSError* error);

In our YahooEngine, we are using a new kind of block, CurrencyResponseBlock that returns the exchange rate. The definition looks like this.

在YahooEngine里面,我们使用一种新的block,CurrencyResponseBlock来返回交换率的值,定义如下:

typedef void (^CurrencyResponseBlock)(double rate);

在任何其他app里面,你都应该丁一你的block的方法类似于CurrencyResponseBlock这样的来给viewController传回值。

步骤 3: 处理返回数据

处理数据,就是转换你从服务器取回的数据,不论时Json还是XML或者二进制plist,都应该在Engine里面完成。再次声明,不要让你的Viewcontroller做这件事,你的Engine应该仅仅发回正确的model对象或者model对象的数组。在Engine中转换json或者xml。再次声明,为了确保分类原则,你的viewController应该不知道从json里面获取单个元素的key。
这就是设计Engine的准则了,大部分的网络库不强迫你遵循一些接口分离的原则,但我do,因为我爱你。:)

步骤4: 方法实现

现在我们讨论一下计算货币交换率的方法的具体实现细节

从yahoo获取交换率,就是一个简单的GET请求,我写了一个宏来定义获取货币率的url请求的格式

#define YAHOO_URL(__C1__, __C2__) [NSString stringWithFormat:@"d/quotes.csv?e=.csv&f=sl1d1t1&s=%@%@=X", __C1__, __C2__]

你写的方法应该按照如下顺序执行:

  1. 准备好url和请求参数
  2. 创建一个请求的MKNetworkOperation对象.
  3. 设置方法参数
  4. 添加完成和错误处理方法,(完成方法就是你处理你响应到相应的model类的地方)
  5. 可选的,还有请求操作的进度指示。(或者在viewController里面处理)
  6. 如果你的操作时下载文件,那么设置一个下载的流(通常是一个文件)给他,这也是可选的
  7. 当请求操作完成时,处理结果并且调用block方法来向调用方法返回数据。

下面是实例代码:

        MKNetworkOperation *op = [self operationWithPath:YAHOO_URL(sourceCurrency, targetCurrency)
                                                  params:nil
                                             httpMethod:@"GET"];

    [op onCompletion:^(MKNetworkOperation *completedOperation)
     {
         DLog(@"%@", [completedOperation responseString]);

		 // do your processing here
         completionBlock(5.0f);

     }onError:^(NSError* error) {

         errorBlock(error);
     }];

    [self enqueueOperation:op];

    return op;

上面的代码构造url然后创建了MKNetworkOperation,设置完完成方法和错误处理方法之后就把他通过调用父类的enqueueOperation方法放入队列中,并且返回一个引用。你的viewController应该持有这个操作并且在viewController弹出视图体系的时候取消网络操作。所以你可以在viewDidAppear里面调用engine的方法,并且在viewWillDisappear里面取消操作。取消操作会释放队列从而使队列继续其他操作(记住,在移动网络中仅仅允许2个并发请求,取消不在需要的操作可以提升性能,加速你的app)

你的ViewController也可以(可选的)添加进度处理,并且更新界面,下面就是如何做

    [self.uploadOperation onUploadProgressChanged:^(double progress) {

        DLog(@"%.2f", progress*100.0);
        self.uploadProgessBar.progress = progress;
    }];

MKNetworkEngine也可以很方便的根据url来创建请求,所以下面代码可以写为:

        MKNetworkOperation *op = [self operationWithPath:YAHOO_URL(sourceCurrency, targetCurrency)];

注意请求的url是自动在初始化engine的代码里面加上提供的域名。

创建一个POST,DELETE或者PUT的方法一样简单,就是更换http方法的参数。MKNetworkEngine也有更多给你多的便利指出比如读取header文件

示例 2:

上传图片到服务器(比如TwitPic)

现在我们看一个如何上传图片到服务器的例子,上传图片明显需要操作把data编码为表格请求。MKNetworkKit遵循一系列的类似ASIHttpRequest的请求。

你可以调用addFile:forKey:在MKNetworkOperation里面来添加文件附件作为请求表格的数据。很简单。

MKNetworkOperation 也有一个简单的方法来从NSData指针中添加图片,就是调用addData:forKey: 方法来直接从NSData上传图片。 (比如直接从相机添加图片).

例子 3:

下载文件到本地目录(缓存)

用MKNetworkKit从远程服务器下载文件并且保存到用户的iPhone的某个地方是超级简单的
仅仅需要设置MKNetworkOperation的outputStream即可:

[operation setDownloadStream:[NSOutputStream
	outputStreamToFileAtPath:@"/Users/mugunth/Desktop/DownloadedFile.pdf"
			  append:YES]];

你可以设置多个输出流到单个请求操作中来保存相同的文件到不同的位置。(比如你想既保存到缓存目录又想保存到工作目录)

例子 4:

图片缩略图缓存。

为了下载图片,你可能需要提供绝对的url而不是一个相对目录

MKNetworkEngine有一个便捷的方法。只需要调用operationWithURLString:params:httpMethodMKNetworkEngine 来用绝对url创建个一个请求,MKNetworkEngine是智能的,它会合并多个get请求到同一个url并且当操作完成时通知所有的block,这极大的提高了获取缩略图的速度。

子类 MKNetworkEngine 并且重写图片缓存目录和缓存级别,如果你不想自定义这两个参数,你只需要调用MKNetworkEngine的方法来下载图片即可,实际上我也比较推荐这种方法,。

缓存操作

MKNetworkKit默认缓存所有的请求。你需要做的仅仅是在你的Engine上打开缓存。当GET请求执行时,如果响应之前被缓存过,你的完成处理代码几乎是立即会被调用并传递缓存过的相应,要知道请求是否被缓存,调用isCachedResponse方法,比如下面

    [op onCompletion:^(MKNetworkOperation *completedOperation)
     {
         if([completedOperation isCachedResponse]) {
             DLog(@"Data from cache");
         }
         else {
             DLog(@"Data from server");
         }

         DLog(@"%@", [completedOperation responseString]);
     }onError:^(NSError* error) {

         errorBlock(error);
     }];

冻结操作

可以确定的, MKNetworkKit的最又去的功能就是内置的冻结操作的功能。所有你需要做的就是设置请求操作为freezable,不用费任何力气!

[op setFreezable:YES];

冻结的操作会在网络不通时自动的被序列化并且上线后自动执行。想一下在离线时标记一条微博为喜欢然后稍后上线之后操作会自动执行。冻结的操作也会被持久化到磁盘当app进入后台之后。并且会在稍后app恢复之后自动执行。

 MKNetworkOperation中的便捷方法

MKNetworkOperation 提供了一些如下便捷方法来方便你格式化你的响应数据

  1. responseData
  2. responseString
  3. responseJSON (Only on iOS 5)
  4. responseImage
  5. responseXML
  6. error

从网络请求获取响应很方便,当返回格式错误时,这些方法返回nil,比如试图从响应为html中获取image会返回nil,唯一可以确保返回正确结果的方法时responseData,如果你确定返回类型,可以用其他方法。

方便宏定义

宏定义Dlog和ALog是我不知羞耻的从stackoverflow上偷的,而且找不到源文件了,如果时你写的,请让我知道

关于GCD

我故意没用gcd,因为网络请求需要随时停止和安排优先级,gcd打给你然比NSOperationQueue更高效,但是不能做到上面两点。我不推荐在网络请求的队列中使用gcd。

关于文档

头文件都加了注释,而且我正在尝试整理,于此同事,你可以随时玩弄代码。

源代码

源代码和Demo工程都在Github,连接:MKNetworkKit on Github

关于新增特性

请不要email添加新特性,最好的方式是在github上添加issue


使用Netkit进行网络仿真:安装与配置指南 Netkit能够在个人电脑上模拟一个网络环境。它基于“用户模式Linux(User Mode Linux)”,允许像启动用户应用程序一样启动一个Linux内核,并因此创建一个虚拟机。这些虚拟机通过行为类似于以太网集线器的碰撞区域相连。每台机器都有自己的文件系统,并且可以使用自己的内核。因此,这是一个由异构机器组成的网络。每台机器都可以通过一个控制台(这里是xterm终端)由用户(root)控制。 阅读详情

相关推荐

WordPress 博客模板 简洁主题

WordPress 博客模板 简洁主题 感觉挺好用的!推荐使用.

无法删除文件的解决办法

有时候我们在删除某个文件或文件夹时,系统提示无法删除,这确定令人十分头疼,现在我们就来看看解决的办法。一、常规解决办法:1,注消或重启电脑,然后再试着删除。2,进入“安全模式删除”。3,在纯DOS命令行下使用DEL,DELTREE和RD命令将其删除。4,如果是文件夹中有比较多的子目录或文件而导致无法删除,可先删除该文件夹中的子目录和文件,再删除文件夹。5,在任务管理器中结束E...

weixin_34268579的博客 589

CVAT自动标注避坑指南:从nuctl安装到YOLOv5模型部署的完整流程

本文详细介绍了在CVAT中部署YOLOv5自动标注功能的完整流程与避坑指南。重点解决了从nuctl工具安装、项目创建时因网络问题导致的镜像拉取失败,到最终模型函数部署与CVAT集成的关键步骤。针对国内网络环境,提供了实用的镜像替换方案,帮助用户顺利完成基于CPU的自动化标注环境搭建。

pytorch8learner的博客 229

MKNETWORKIT使用

为什么80%的码农都做不了架构师?>>> ...

weixin_34357887的博客 240

封神台靶场,为了小芳,冲之——cookie注入

第二个靶场 打开网站 找一下注入点 一般在新闻这种里面点开看看 先判断是否存在注入 有waf 尝试了很多方法绕过都没成功,/and/,aandnd,AnD等一系列都没绕过去,乌鸡鲅鱼 删掉id=169 发现 然后判断cookie注入 在搜索框输入 Javascript:alert(document.cookie=”id=”+escape(‘169’)); 然后弹窗了(其中 “id=” 取决URL中的id= escape中的数值也是URL中id=的值)返回刚刚的页面,把ID删除后一样能正常显示。说明服务器能

Wubuqing的博客 653

电压比较器---滞回比较器(施密特触发器)

当输入电压从小电压开始增加,当其大于VT+时,电压比较器输出低电平,此时阈值电压变成下门限电压(VT-);当输入电压从大电压开始减小,当其小于VT-时,电压比较器输出高电平,此时阈值电压变成上门限电压(VT+);只有当第一次超过上门限电压或者下门限电压值,电压比较器的输出才会翻转变化;Uo为比较输出电压,有两种电压状态VoH(高电平)和VoL(低电平);当Uo输出为高时,电压比较器的阈值电压是上门限电压(VT+);当Uo输出为低时,电压比较器的阈值电压是下门限电压(VT-);Vref为比较参考电压;

weixin_69076249的博客 1万+

最新MkBlog主题源码Ver2.2版+WordPress内核

正文: 模板同步官网更新的最新版本,仅服务器才可以使用,无需安装任何插件,虚拟主机无法搭建。 推荐配置:宝塔 + PHP7.2 + MySQL5.6,注意:适用于WordPress程序。 主题安装方法:将目录中的 mkBlog.zip解压后上传至 [wordpress安装目录/wp-content/themes/] 文件夹, 然后在 WordPress 后台的 [外观>主题] 中启用 mkBlog 即可。 下方图片是模板的更新日志: 程序: lanzou.com/irGEh04m6..

rehtrjy的博客 403

【NVIDIA驱动的顽固问题】---- /dev/sdax:clean,xxx/xxx files,xxx/xxx blocks ---- 最全解决方法

本文的意义在于整理总结关于此问题的全部解决方法,希望能给大家节约时间。

lc1852109的博客 3127

MKNetWorkKit使用

在整个程序中只有一个全局队列 MKNetWorkKit中主要有两个类,MKNetworkEngine和MKNetworkOperation,MKNetworkOperation就是一个操作,是NSOperation的子类,每个HTTP操作通过MKNetworkEngine入队,队列是一个NSOperationQueue,在程序是一个单例,在MKNetworkEngine的initial...

weixin_30363509的博客 118

SAP入门技术分享四:模块化程序

SAP入门技术分享三:模块化程序

ITxiaoangzai的博客 1152

QT+Halcon实现螺纹检测

工业上要检测螺丝的内外直径、内外牙距、内外角度,现在比较好用的图像处理库,开源的opencv,收费的有halcon。为了实现螺纹检测,和对比螺纹检测拿个库比较好。分别用opencv和halcon实现了螺纹检测,通过对比发现用halcon实现的效果比较。现在用博客把实现过程记录下来: 1、需要检测的螺纹数据如下: 2、为了实现检测螺丝以上数据,螺纹内径、螺纹外径、螺纹外牙距、螺纹...

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 7050

[IOS]网络开源库使用,MKNetwork (2.0)

什么是 MKNetworkKit? MKNetworkKit 是一个用objective-c写的网络库,具有无缝连接,基于block,ARC支持以及易用等特点。 MKNetworkKit有其他两个库:ASIHTTPRequest和AFNetworking,结合了两个库的共同特点,并且有一些新的特性。除此之外,MKNetworkKit可能会比其他网络库而言为了代码的清晰性。 特性 超轻量级

Simth_zjp的专栏 1321

华为OD机试双机位C卷-恢复数字序列 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 恢复数字序列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 恢复数字序列。

qq_45776114的博客 1203

WordPress简约mkBlog博客主题模板v2.1

源码下载:WordPress简约mkBlog博客主题模板v2.1-小程序文档类资源-优快云下载 WordPress简约mkBlog博客主题模板v2.1,支持WordPress 5.4.2+,PHP 5.6+(支持 PHP 7+),兼容 IE9+所有主流浏览器。 模板特色: 极简响应式前端界面,手机、平板和电脑浏览自适应 pjax 页面无刷新加载 夜间模式 垃圾评论自动过滤、防止冒充管理员评论,自带评论等级展示 精美的新评论提醒邮件 自带QQ、微博、贴吧三大社交平台的小表情,并加入了全套

软希网分享源码的博客 336

图解电动汽车:电动汽车的分类

前面《电动汽车简介》中简单介绍了电动汽车的分类,主要包括混合动力电动汽车(HEV)和纯电动汽车(BEV)两大类。其中,混合动力汽车又可分为非插电式混合动力汽车、插电式混合动力汽车(PHEV)以及增程式电动汽车(REEV)。 主要分类 简单来说,各类电动汽车的特点如下。 纯电动汽车(BEV)就是指动力来源完全由电能提供,由电动机驱动的汽车,并且电能储存在电池中。 混合动力汽车(HEV)则是指动力来源可以是化石燃料,也可以是电能,并且电能除了可以存储在电池中,还可以由化石能源转化而来。 非插电式混合动力汽车

程序员「阿基米东」的编程之旅 3089

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

表白套路计算机公式,高级表白密码我喜欢你公式 套路喜欢的人

在表白的时候,并不是每个人都会主动说出我喜欢你,而是很难开口说出来。那么不如用高级表白密码我喜欢你公式吧,隐藏含蓄告诉对方。高级表白密码我喜欢你1、字母表白数字密码:9121522521= I LOVE U表白解密:从1开始到26,分别表示从A到Z,即:A(1)B(2) C(3) D(4) E(5) F(6) G(7) H(8) I(9) J(10) K(11) L(12) M(13) N(14)...

weixin_35705011的博客 9491

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

WordPress博客趣主题:简约与功能兼备的个人博客模板

在个人博客领域,**博客趣主题(Bokequ Theme)** 以其极简设计与丰富功能脱颖而出。作为一款专为WordPress平台开发的静态网页模板,它以“最小化设计+趣味化功能”为核心,提供了一种兼顾美观与实用的建站解决方案。无论是技术博主、创意写作者还是自由职业者,博客趣主题都能以低门槛的部署和高自由度的定制,帮助快速搭建属于自己的个性化博客站点

专注于与编程相关的知识内容分享 872

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MKNetwork MKBLOG中文翻译

这片文章也有塞尔维亚-克罗地亚语(由JovanaMilutinovich翻译)和日语(由@noradaiko翻译) 如果有个一个网络库能够自动的为你处理cache该有多好啊。 如果有一个网络库能够在设备离线的时候自动的记住用户的操作该有多酷啊。 当你离线的时候,你喜欢了一条微博或者把一条新闻标记为已读,然后网络库会在设备连网后自动执行这些操作,并且还不用写一行多余的代码。下面我们

seraph2012的专栏 1605

ios MKNetworkKit 的使用

常用框架比如:AFNetworking,ASIHttpRequest,SDWebImage,MKNetWorKit等。 iOS5已出来这么久了,而ASIHttpRequest的作者已经申明不更新了,在iOS5环境下,其实还是有些问题的。 现在MKNetWorkKi吸取了ASIHttpRequest与AFNetWorking的优点,并加入了自己特有的功能。 下载: gitHub地址:http

服务器端攻城师 1万+

表白密码:I Love you的42种密码表白方式

字母表白数字密码:9121522521 表白解密:从1开始到26,分别表示从A到Z,即:A(1)B(2) C(3) D(4) E(5) F(6) G(7) H(8) I(9) J(10) K(11) L(12) M(13) N(14) O(15) P(16) Q(17) R(18) S(19) T(20) U(21) V(22) W(23) X(24) Y(25) Z(26)。 9=I

qq_32047637的博客 23万+

一个iOS 框架介绍:MKNetworkKit

ASIHTTPRequest (作者:BenCopsey) 是一个使用简单,可用于各种从简单到复杂的 HTTP 请求,或者可用于处理 Amazon S3、Rackspace 等REST 服务的强大框架。 不幸的是,Ben 早在 2011 年 9 月 21 日就已经声明停止开发和支持该框架(见http://allseeing-i.com/%5Brequest_release%5D; )。 Ben ...

dawuafang 311

MKNetworkEngine重复调用会程序会崩溃问题

MKNetworkEngine 是通过通知中心

h289962920的专栏 596

轻量级网络请求框架MKNetworkKit介绍及使用

在苹果开发中,我们可以使用苹果提供的NSURLConnection和NSURLRequest网络请求API来解决大部分的WebService请求,但使用起来不是很简洁方便,因此正面介绍一个第三方提供的网络框架MKNetworkKit。 1、什么是MKNetworkKit? MKNetworkKit 是一个使用十分方便,功能又十分强大、完整的iOS网络编程代码库,完全基于 ARC。它只有两个类,

备忘录 2万+

关于MKNetworkKit的一些问题

1.缓存的问题: 缓存,这个东西好啊。但是如果细心的朋友会发现。如果同一个URL(A),在60秒内去重复请求它。你得到的数据将全部是缓存(如果使用了缓存,并使用GET方法)   原因: 一开始以为是服务器有限制。后面发现只要GET的都有这种情况,那肯定就是库里面写了一个60秒去做处理了,当然大家去跳着代码找肯定也是可以找到的。   解决:          MK

lfr_dev的专栏 695

Linux 3.8 Writeback机制源码分析

writeback机制源码分析 writeback相关数据结构 与writeback相关的数据结构主要有: 1,backing_dev_info,该数据结构描述了backing_dev的所有信息,通常块设备的request queue中会包含backing_dev对象。 2,bdi_writeback,该数据结构封装了writeback的内核线程以及需要操作的inode

路在脚下 4790
上一篇: [IOS] UIKit Dynamics入门
下一篇: [IOS]网络开源库使用,MKNetwork (2.0)
Simth_zjp
博客等级 码龄12年 2粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值