Objective-C的MKNetworkKit开发框架解析

2020-01-14 17:38:40王冬梅

MKNetworkEngine 是一个伪单例类,管理程序中的网络队列。它是伪单例的,也就是说,对于简单请求,你可以直接用MKNetworkEngine 中的方法。要进行深度的定制,你应该进行子类化。每个 MKNetworkEngine 子类有它自己的Reachability 对象,用于通知它来自服务器的reachability 通知。对于不同的 REST 服务器,你可以考虑创建单独的 MKNetworkEngine子类。

它是伪单例,它的子类的每个请求都共用唯一的一个队列。你可以在应用程序委托中retain 这个 MKNetworkEngine ,就像CoreData 的 managedObjectContext 类一样。在使用MKNetworkKit 时,创建一个 MKNetworkEngine 子类将你的网络请求进行逻辑上的分组。例如,将所有关于 Yahoo 的方法放在一个类,所有 Facebook 有关的方法放进另一个类。来看 3 个实际使用的例子。

例1:

创建一个  “YahooEngine” 从 Yahoo 财经服务器抓取货币汇率。

步骤 1:创建YahooEngine 类继承于MKNetworkEngine。MKNetworkEngine 使用主机名和指定的头(如果有的话)进行初始化。头信息可以是nil。如果你是在自己的 REST 服务器上,你可以考虑加一个客户端 app 的版本或者其他信息(比如客户端的标识)。

 

复制代码

 

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

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

 


 

注意,yahoo 并不识别你在头中发送x-client-identifier 给它,这个示例仅仅是演示这个特性而

由于使用了 ARC 代码,作为开发者你需要拥有(强引用)Engine对象。

一旦你创建了一个 MKNetworkEngine子类, Reachability 即自动实现。当你的服务器由于某些情况挂了,主机名不可访问,你的请求会自动被冻结。关于“冻结”,请参考后面的“冻结操作”小节。

步骤 2:设计Engine 类 (关注分离)