使用NSNotificationCenter 事件通知

                                                 使用NSNotificationCenter 事件通知

         在进行与服务器通信的时候,经常是一个UI类去请求服务器数据,然后服务器将回调到appDelegate,这个时候我以前的做法是在AppDelegate中保存 和维护这个UI类的指针,然后appDelegate在收到返回消息的时候,如果这个UI类的指针还存在,并且不为NULL,那么就直接调用UI类的指针。这种方法太麻烦了。


         今天才发现有NSNotificationCenter这个东东。
         
         使用方法如下:
      (1)首先注册 要接收Notification的对象  到 NSNotificationCenter,一般这段代码放在init或者onEnter里面。

        代码如下:

        NSString* const strFuckMe = @"FuckMe";
   

   [[NSNotificationCenter defaultCenteraddObserver:self selector:@selector(onFuckme:)   name:strFuckMe object:nil];



   第一个参数是要接收Notification的对象,第二个参数是响应函数,第三个是通知的名称,第四个参数表示接收哪个发送者的通知,如果第四个参数为nil,接收所有发送者的通知。



  (2)既然init里面注册了这个通知,那么就需要在dealloc里面移除这个通知的注册:

      代码如下:

   

      [[NSNotificationCenter  defaultCenterremoveObserver:self  name:strFuckMe object:nil];  



  (3)怎么发送Notification通知呢?

   代码如下:

   

   如果不需要传递参数的通知:

   

    [[NSNotificationCenter defaultCenter] postNotificationName:strFuckMe object:nil];


   如果要传递参数的通知:

   SFuckRet sFuckRet;

   NSValue* value = [NSValuevalueWithBytes:&sFuckRetobjCType:@encode(SFuckRet)];


   [[NSNotificationCenter defaultCenterpostNotificationName:strFuckMe object:nil userInfo:[NSDictionarydictionaryWithObjectsAndKeys:value,@"value",nil]];


  SFuckRet是一个定长的结构体对象,所以需要用NSValue来包装以下,才能放到Object-c的容器中。

  postNotificationName参数是要发送的通知的名字,object:参数是一个id,一般可以传递self,可以让接收通知者能调用的发送通知者。

  userInfo是一个NSDictionary可以传递自己的其他信息。一般数据都放在这个里面。


  注意一般NSValue一般用来包装定长的结构体,CGRect,CGPoint什么的,千万不能包含指针之类的东西。


  (4)如何处理通知呢?

   代码如下:

   

   

- (void)onFuckme:(NSNotification*)notification

{

    NSDictionary* user_info = [notification userInfo]; 

    NSValue* value = [user_info objectForKey:@"value"];

    SFuckRet sfuckRet;

    [value getValue:&sfuckRet];

}

NSDictionary* user_info = [notification userInfo]; 这句代码就是取出PostNitifycation的时候设置的NSDictionary信息。


这样就取出来了所要传递的结构体啦。






   

     

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值