Skip to content

nashibao/na_ios_network

Repository files navigation

na_ios/network

na_ios/networkはnetworkアクセスに置けるスレッドプログラミングを隠蔽するモジュールです. バックエンドにGCDを用いたものと、NSOperationを用いたものの二種類があります.

GCDを用いた、NANetworkGCDHelperのサンプルコードは次のようになります.

[NANetworkGCDHelper sendAsynchronousRequest:req
                             returnEncoding:NSShiftJISStringEncoding
                                 returnMain:NO
                             successHandler:^(NSURLResponse *resp, id data) {
    // success
} errorHandler:^(NSURLResponse *resp, NSError *err) {
    // error
}];

また、jsonへのエンコードを行う次のAPIもあります.

+ (void)sendJsonAsynchronousRequest:(NSURLRequest *)request
                         jsonOption:(NSJSONReadingOptions)jsonOption
                     returnEncoding:(NSStringEncoding)returnEncoding
                         returnMain:(BOOL)returnMain
                     successHandler:(void(^)(NSURLResponse *resp, id data))successHandler
                       errorHandler:(void(^)(NSURLResponse *resp, NSError *err))errorHandler;

returnMainをYESにするとバックエンドのスレッド内でstringのエンコードとjsonのエンコードを行ってからmain threadに結果を返してくれます.

NANetworkGCDHelperは単純なAPIのみで、キャンセルやネットワークコネクションの有無などを考慮しません.これらの機能を使うためにはNANetworkOperationを使って下さい.

NANetworkOperationは次のように呼び出すことができます.

[NANetworkOperation sendAsynchronousRequest:req
                             returnEncoding:NSShiftJISStringEncoding
                                 returnMain:YES
                                      queue:nil
                                 identifier:@"testidentifier"
                         identifierMaxCount:1 options:nil
                             queueingOption:NANetworkOperationQueingOptionReturnOld
                             successHandler:^(NANetworkOperation *op, id data) {
    // hoge
} errorHandler:^(NANetworkOperation *op, NSError *err) {
    // hoge
}];

NANetworkGCDHelperと比較して、queueidentifieridentifierMaxCountqueueingOptionなどの引数が追加されています

queueパラメタは処理を走らせるためのNSOperationQueueです.nilに設定すると[NSOperationQueue globalBackgroundQueue]が利用されます.

queueingOptionパラメタはNANetworkOperationQueingOptionから選択します.

typedef enum NANetworkOperationQueingOption: NSInteger {
    //キャンセルしてからaddOperation
    NANetworkOperationQueingOptionCancel = 2,
    //古いのがあったら返すだけ
    NANetworkOperationQueingOptionReturnOld = 1,
    //先に入っているやつの終了を待つ
    NANetworkOperationQueingOptionJustAdd = 0,
    NANetworkOperationQueingOptionDefault = 0,
} NANetworkOperationQueingOption;

identifierパラメタはqueueingOptionにおける識別子です.またキャンセル処理もこの識別子を使ってまとめてキャンセル処理を行うことができます. identifiermaxCountパラメタはNANetworkOperationQueingOptionCancel, NANetworkOperationQueingOptionReturnOldの時にだけ使われる最大値です.

キャンセル処理はidentifierを使って次のように行うことが出来ます.

[NANetworkOperation cancelByIdentifier:@"testidentifier" handler:^{
    // hoge
}];

またNANetworkOperationでは内部にtonymillion/Reachabilityを利用しています.ネットワークがないところでは一度アクセスをあきらめ、ネットワークが復帰したタイミングでもう一度処理を走らせます.ただし、アクセス途中でネットワークが遮断された場合はエラーハンドラに返ってきます.

またNSURLRequestにおいて簡単に初期化するためのラッパが入ったカテゴリ、UIActivityIndicatorを管理するNANetworkActivityIndicatorManager[NSOperationQueue globalBackgroundQueue]なども追加されています.

他のNetworkライブラリとの比較

AFNetworkingとか..

podfile注意点

cocoapod wiki:Creating-a-project-that-uses-CocoaPods

FAQ2の"If Xcode can’t find the headers of the dependencies:" でハマるかも..

About

network module for na_ios

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published