YYReachability的學習

圖片來源網(wǎng)絡

看了YYReachability的代碼,學習了幾點記錄下,與大家分享。

WWAN的分類

一直在說的2G,3G,4G網(wǎng)絡,看了代碼后才知道,原來移動網(wǎng)絡的分類是根據(jù)頻率來分的:

typedef NS_ENUM(NSUInteger, YYReachabilityWWANStatus) {
    YYReachabilityWWANStatusNone  = 0, ///< Not Reachable vis WWAN
    YYReachabilityWWANStatus2G = 2, ///< Reachable via 2G (GPRS/EDGE)       10~100Kbps
    YYReachabilityWWANStatus3G = 3, ///< Reachable via 3G (WCDMA/HSDPA/...) 1~10Mbps
    YYReachabilityWWANStatus4G = 4, ///< Reachable via 4G (eHRPD/LTE)       100Mbps
};

蘋果官方提供的網(wǎng)絡分類:

dic = @{CTRadioAccessTechnologyGPRS : @(YYReachabilityWWANStatus2G),  // 2.5G   171Kbps
                CTRadioAccessTechnologyEdge : @(YYReachabilityWWANStatus2G),  // 2.75G  384Kbps
                CTRadioAccessTechnologyWCDMA : @(YYReachabilityWWANStatus3G), // 3G     3.6Mbps/384Kbps
                CTRadioAccessTechnologyHSDPA : @(YYReachabilityWWANStatus3G), // 3.5G   14.4Mbps/384Kbps
                CTRadioAccessTechnologyHSUPA : @(YYReachabilityWWANStatus3G), // 3.75G  14.4Mbps/5.76Mbps
                CTRadioAccessTechnologyCDMA1x : @(YYReachabilityWWANStatus3G), // 2.5G
                CTRadioAccessTechnologyCDMAEVDORev0 : @(YYReachabilityWWANStatus3G),
                CTRadioAccessTechnologyCDMAEVDORevA : @(YYReachabilityWWANStatus3G),
                CTRadioAccessTechnologyCDMAEVDORevB : @(YYReachabilityWWANStatus3G),
                CTRadioAccessTechnologyeHRPD : @(YYReachabilityWWANStatus3G),
                CTRadioAccessTechnologyLTE : @(YYReachabilityWWANStatus4G)}; // LTE:3.9G 150M/75M  LTE-Advanced:4G 300M/150M

通過屬性

@property (nonatomic, readonly, retain, nullable) NSString* currentRadioAccessTechnology __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);

返回。

網(wǎng)絡監(jiān)控

針對網(wǎng)絡改變的主要代碼是:

SCNetworkReachabilityContext context = { 0, (__bridge void *)self, NULL, NULL, NULL };
SCNetworkReachabilitySetCallback(self.ref, YYReachabilityCallback, &context);
SCNetworkReachabilitySetDispatchQueue(self.ref, [self.class sharedQueue]);

使用回調方法來通知網(wǎng)絡的變化。

靜態(tài)方法

使用了C語言的靜態(tài)函數(shù)來傳遞函數(shù)指針。

SCNetworkReachabilitySetCallback(self.ref, YYReachabilityCallback, &context);

YYReachabilityCallback為申明的靜態(tài)函數(shù)

static void YYReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void *info) {
    YYReachability *self = ((__bridge YYReachability *)info);
    if (self.notifyBlock) {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.notifyBlock(self);
        });
    }
}

與AFNetworking庫中的AFNetworkReachabilityManager實現(xiàn)邏輯一致。

測試

編寫了測試代碼:

- (void)testReachability
{
    YYReachability *reachability = [YYReachability reachability];

    reachability.notifyBlock = ^(YYReachability *reachability){
        NSLog(@"reachability.flags is %d.", reachability.flags);
        NSLog(@"reachability.status is %lu.", (unsigned long)reachability.status);
        NSLog(@"reachability.wwanStatus is %lu.", (unsigned long)reachability.wwanStatus);
    };

    self.reachability = reachability;
}

必須申明實例變量,如果是臨時編碼,將不會執(zhí)行block。

  • 從無網(wǎng),切換到4G,
2017-09-25 19:09:46.864040+0800 RecordTechnology[12013:1154192] reachability.flags is 262147.
2017-09-25 19:09:46.864369+0800 RecordTechnology[12013:1154192] reachability.status is 1.
2017-09-25 19:09:46.864541+0800 RecordTechnology[12013:1154192] reachability.wwanStatus is 4.

切換到wifi,

2017-09-25 19:11:36.266635+0800 RecordTechnology[12013:1154192] reachability.flags is 2.
2017-09-25 19:11:36.282290+0800 RecordTechnology[12013:1154192] reachability.status is 2.
2017-09-25 19:11:36.291125+0800 RecordTechnology[12013:1154192] reachability.wwanStatus is 4.

關閉4G,不打印日志
關閉wifi。

2017-09-25 19:11:56.093725+0800 RecordTechnology[12013:1154192] reachability.flags is 0.
2017-09-25 19:11:56.094497+0800 RecordTechnology[12013:1154192] reachability.status is 0.
2017-09-25 19:11:56.094859+0800 RecordTechnology[12013:1154192] reachability.wwanStatus is 4.

網(wǎng)絡切換顯示正常。

// END

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,836評論 25 709
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,117評論 4 61
  • 忘了工作之后,多久沒有重新寫文章了,除了偶爾感慨的寫寫詩,填填詞,填填曲之外,在微信朋友圈的感染下,開始了一句話不...
    茗香酒影閱讀 317評論 4 5
  • 才回到上海,可以有點時間寫些東西。 從輸給RNG丟掉直接晉級S7的機會,到最終贏下了IG獲得了去S7的最后一張門票...
    zaxchou閱讀 355評論 0 1
  • 什么是異或運算?就是不一樣的位得1,一樣的位得0。 交換兩個數(shù)的值可以有這騷操作 它是如何做到的呢? 先來看這樣一...
    superkun閱讀 1,431評論 0 1

友情鏈接更多精彩內容