美文网首页
公司通信类 自 解析。

公司通信类 自 解析。

作者: 林步蜓 | 来源:发表于2015-12-25 09:27 被阅读35次
首先是反向传值。 代理传值和Block结合。

(一)首先 NSURL delegate拿到返回值。
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
   ...

    [self operationSucceeded]; //启动MK处理方法,
   ...   
}

(二)MKNetworkOperation 拿到数据 启动Block 回调传值
-(void) operationSucceeded { // 注意mk是个数组中存放的blocks,因为是队列机制
  for(MKNKResponseBlock responseBlock in self.responseBlocks)
   responseBlock(self); // CSIINetworkHttpClient中定义的此Block的代码块函数体
}

 (三) CSIINetworkHttpClient  被responseBlock的代码块函数体 回调传值
onSuccessBlock([completedOperation responseString],webInfo);//这个Block是调用Client页面CSIIBusinessTransaction传进来的onSuccessBlock代码块,在此处被传值调用。

{
   (四)    CSIIBusinessTransaction 被Block 回调传值
  (1)  CSIINetworkHttpClient 被实例化,并实现了onSuccessBlock代码块此Block在下面函数中被实现代码块
client=[[CSIINetworkHttpClient alloc]initWithTransaction:self.caller.transactionId message:self.caller.transactionArgument caller:self.caller argument:nil onSuccessBlock:^(NSString *string,NSMutableDictionary *webInfo) {
  (2)    /*
          *  lcxNote  此处直接传值给了 caller.webdata.
           **/
          self.caller.webData = [string objectFromJSONString];
  (3) [self.delegate transactionSucceeded:self]; //通过此方法代理高给CSIIBusinessLogic 启动Caller的VC页面,告知VC页面可以
,不再是Block 

webData
}

    (五)       CSIIBusinessLogic 单例类 在executeTransaction中,启动了CSIIBusinessTransaction并成为其代理代码如下。
      [pageRunningTransactions addObject:[[CSIIBusinessTransaction alloc]initWithTransaction:self caller:caller]];
                        //lcxNote启动Transaction,并成为其代理,启动后,CSIIBusinessTransaction 最终从(第一步系统自带的)NSURLdele得到数据。
                     
     通过回调   transactionSucceeded   或得值,

- (void)transactionSucceeded:(CSIIBusinessTransaction*)transaction;{       if (transaction.caller.originalClass == object_getClass(transaction.caller.delegate)) {        if (transaction.caller.transactionBlock) {            transaction.caller.isSuccess = YES;            if (transaction.caller.isWeb) {            }else{                transaction.caller.transactionResult = transaction.resultObject;
            }
            transaction.caller.transactionBlock(transaction.caller); // 执行了ViewController中实现的caller定义的需要传入自身做参数的TransactionBlock ,并没有传值给Caller, caller是直接从Transaction中的on
        }else{            if ([transaction.caller.delegate respondsToSelector:@selector(transactionCallback:)]) {                transaction.caller.isSuccess = YES;                if (transaction.caller.isWeb) {                }else{                    transaction.caller.transactionResult = transaction.resultObject;                }                [transaction.caller.delegate transactionCallback:transaction.caller];            }        }    }       [self removeTransaction:transaction.caller];    if ([self.runningTransactions count]==0) {        if (transaction.caller.isShowActivityIndicator) {            //关闭转轮            [[CSIIUIActivityIndicator sharedInstance]close];        }    }
}

其次是正向发起交易。

(一) 交易发起过程。
  (1)实例化CSIIBusinessCaller
              new_transaction_caller
                /*                 *   lcxNote                 CSIIBusinessCaller * caller = [[CSIIBusinessCaller alloc] init];\                 caller.pageId = NSStringFromClass([self class]);\                 caller.delegate = (id<CSIIBusinessCallerDelegate>)self;                 **/                               caller.transactionId = GenToken;                caller.isWeb = YES;                __block NSString *tokenName = nil;               

     (2)CSIIBusinessLogic类启动CSIIBusinessTransaction
#define execute_transaction_block_caller(block) [[CSIIBusinessLogic sharedInstance]executeTransaction:caller transactionBlock:block]; 
//                [[CSIIBusinessLogic sharedInstance]executeTransaction:caller transactionBlock:block];                execute_transaction_block_caller((^(CSIIBusinessCaller *returnCaller){
                    if ( returnCaller.isSuccess) {
                        tokenName = returnCaller.webData;                        DebugLog(@"lcxDebug 输入完手机号码后的 returnCaller.webData->%@\n",returnCaller.webData);                        _tokenName=tokenName;                       

                    }                                   }));           
            }
      (3)CSIIBusinessTransaction 启动了Client,Client启动了MK,MK使用NSURL获得数据,并反向传值。
        

(二) Caller中定义了一个TransactionBlock  它的参数是自身CSIIBusinessCaller,这个Block是VC页面获得数据的方式。
{ typedef void(^TransactionBlock)(CSIIBusinessCaller* returnCaller);

相关文章

  • 公司通信类 自 解析。

  • Android中简单串口通信开发

    该博文是博主第一次接触串口通信做的笔记,并没有详细地解析SerialPort类和SerialPortFinder类...

  • AFNetworking 3.0 源码解析之NSURLSessi

    NSURLSession是AFNetworking的核心部分,主要负责网络通信部分。 下面分两个部分来解析:父类:...

  • Android的Parcelable类的序列化

    Android进程间通信 以aidl为例来说明这个情况 先了解Parcelable类的解析情况 序列化 : 将对象...

  • Java虚拟机06--虚拟机的类加载机制

    类加载的时机 类加载的过程加载验证准备解析1.类或接口解析2.字段解析3.类方法解析4.接口方法解析初始化 类加载...

  • 通信类

    什么是同源策略及限制? —> 前后端如何通信? —> 如何创建Ajax? —> 跨域通信的几种方式? 一、什么是同...

  • 通信类

    一、同源策略及限制 源:域名 端口号 协议 同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交...

  • 通信类

    什么是同源策略及限制 同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互,这是一个用于隔离潜在的...

  • 通信类

    同源策略及限制 概念 同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文...

  • 串口通信Serial Port类C++实现

    本文转载自串口通信Serial Port类C++实现[https://blog.csdn.net/luxiaoxu...

网友评论

      本文标题:公司通信类 自 解析。

      本文链接:https://www.haomeiwen.com/subject/zznvhttx.html