c/c++语言开发共享经验之谈—父子控制器(验证苹果的一句话)

苹果官方有一句话说的非常好:当控制器的view互为父子关系,那么控制器最好也互为父子关系 我之前有一篇说控制器view的显示里边我说了一个很严重的问题,就是当控制的view还在,但是控制器不在了,造

苹果官方有一句话说的非常好:当控制器的view互为父子关系,那么控制器最好也互为父子关系

我之前有一篇说控制器view的显示里边我说了一个很严重的问题,就是当控制的view还在,但是控制器不在了,造成了数据无法显示的问题,所以我们就要想办法保住控制器的命。那么我们今天继续来看一下,如何保住控制器的命。


今天我们来用屏幕旋转的一个案例来说明一个问题:当控制器的view互为父子关系的时候,控制器不是父子关系时,会出现什么严重的问题。 看一个案例,在ipad开发中,屏幕旋转是经常要发生的事情,因为屏幕比较大。

  @interface zyviewcontroller ()  - (ibaction)vc1;    @property (nonatomic, strong) zyoneviewcontroller *one;    @end    @implementation zyviewcontroller    - (zyoneviewcontroller *)one  {      if (!_one) {          self.one = [[zyoneviewcontroller alloc] init];          self.one.view.frame = cgrectmake(10, 70, 300, 300);      }      return _one;  }  - (void)viewdidload  {      [super viewdidload];    }  - (void)willrotatetointerfaceorientation:(uiinterfaceorientation)tointerfaceorientation duration:(nstimeinterval)duration  {      nslog(@"willrotatetointerfaceorientation");  }    - (void)didrotatefrominterfaceorientation:(uiinterfaceorientation)frominterfaceorientation  {      nslog(@"didrotatefrominterfaceorientation");  }    - (ibaction)vc1 {        [self.view addsubview:self.one.view];  }

这里,我们先通过懒加载一个zyoneviewcontroller,然后用一个属性对他强引用,保护他的命。然后我们监听zyviewcontroller的屏幕旋转事件。接下来我们在zyoneviewcontroller中也监听一下屏幕旋转事件:

  @implementation zyoneviewcontroller      - (void)willrotatetointerfaceorientation:(uiinterfaceorientation)tointerfaceorientation duration:(nstimeinterval)duration  {      nslog(@"zyoneviewcontroller--willrotatetointerfaceorientation");  }    - (void)didrotatefrominterfaceorientation:(uiinterfaceorientation)frominterfaceorientation  {      nslog(@"zyoneviewcontroller--didrotatefrominterfaceorientation");  }    - (ibaction)onebtnclick {      nslog(@"onebtnclick");  }

然后我们看一下打印的屏幕旋转 ,打印的结果:
c/c++语言开发共享经验之谈—父子控制器(验证苹果的一句话)

可以很明显的看出来,这当zyviewcontroller控制旋转的时候,zyoneviewcontroller控件并不知道。因为他们控制器之间,不是父子关系,那么不是父子关系,zyviewcontroller控制器旋转,凭什么告诉zyoneviewcontroller控制器,对吧。


那现在我们让他们成为父子关系,然后看一下结果:

  @implementation zyviewcontroller    - (zyoneviewcontroller *)one  {      if (!_one) {          self.one = [[zyoneviewcontroller alloc] init];          self.one.view.frame = cgrectmake(10, 70, 300, 300);            [self addchildviewcontroller:self.one];      }      return _one;  }

然后我们看一下旋转的结果:
经验之谈—父子控制器(验证苹果的一句话)
所以我们要记得,当控制器的view互为父子关系,那么控制器最好也互为父子关系

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/606832.html

(0)
上一篇 2021年5月14日
下一篇 2021年5月14日

精彩推荐