美文网首页
push、pop、网络延迟

push、pop、网络延迟

作者: 闲得一B | 来源:发表于2016-04-09 08:03 被阅读115次

一:模拟需求


A界面push到B界面再从B界面push到C界面。

具体:程序一开启:显示A界面,在B界面可以点赞 ,点赞成功与失败都需要“弹框提示用户”, 同时B界面也能push到C界面。


需求.png

二:问题


在B界面点赞之后,还没有“弹框提示用户”时,就“返回”到A界面或者push到C界面,此时,会在A界面或者C界面“弹框提示用户”,体验效果不好。

解决思路:自己的事情自己做,便于后期维护。

    1、在A、C界面取消弹框 ==>不推荐
    2、在返回 按钮上做文章 ==>不推荐、还会到C界面怎么办?
    3、在B界面的delloc方法中 ==>行不通,因为在点击“返回”后,虽然pop出栈了,但是B的View还没有消失,所以代码还是会“弹框提示用户”。并且push到C界面呢?
    4、在pop的内部方法removeFromParentViewcontroller方法中操作(当B的控制器彻底从导航控制器中移除时会调用这个方法)==>不是最好,因为有可能是push
    5、在B界面中点赞发送网络请求后,接收到服务器返回的数据时做判断==>推荐

三:解决


在发送网络请求后,接收到服务器返回的数据时做判断。
并且:需要一种能在pop回上一个界面和push到下一个界面都能满足需求的方法。

怎么判断呢?

  首先要知道的一点:如果是B界面push到C界面,那么B界面还是有导航控制器的,并且View不会消失。但是当B界面pop到A界面时,B界面是没有导航控制器的,并且View会等到“弹框提示用户”后,没有强引用引用时才会消失。
    1、当导航控制器为nil的时候==>B界面push到C界面时,B界面导航控制器不为nil。
    2、当当前控制器不是导航控制器的子控制器==>push到C界面时行不通。B界面push到C界面时,B界面还是导航控制器的子控制器。
    3、当导航控制器的第“1”个子控制器是B界面的控制器(A的控制器是第0个)==>推荐
    核心代码:[self isEqual:self.navigationController.childViewControllers[1]];

四:不足


需要知道每个控制器的具体下标。


知识点:


     1、isEqual 、isEqualToString 、 == 三者的区别:
          1>  isEqual 是 NSObject 的方法 ,而 isEqualToString 是 NSString 的方法
          2> == 比较的是指针指向的地址
          3>isEqual是判断两个对象是否相等, == 是判断两个对象是否相同
    
     2、storyboar中能够给不同的控制器绑定同一个控制器(比如给A、B、C界面都绑定VeiwController)但是使用时需要注意:小心报错。
     
     3、pop操作后,界面不一定马上消失。需要等到没有强引用时才有可能销毁,销毁需要时引用计数器为0.
  
     4、pop后没有导航控制器,push之后还有导航控制器。

     5、向nil发送消息时不会报错。

相关文章

网友评论

      本文标题:push、pop、网络延迟

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