
但是,我发现了一些我不太懂的东西,让我担心.如果有人能对此提供一些见解,我将不胜感激.
我的应用使用普通的导航控制器.为了“向前”移动到新的视图控制器,我使用自定义segues;没有问题.但是,应用程序中有一点我要回到导航堆栈的开头.我还使用自定义segue配置了“导航”,为此,我通过将最后一个视图控制器拖到第一个(对我来说已经很奇怪)在Interface Builder中创建了segue,并且我实现了自定义segue以下列方式执行方法:
-(voID)perform{ UIVIEwController *src = (UIVIEwController *)self.sourceVIEwController; UIVIEwController *dest = (UIVIEwController *)self.destinationVIEwController; [src.navigationController popToRootVIEwControllerAnimated:NO]; // Custom animation code here} ……效果很好.但是,我不明白为什么会这样.在我看来,自定义segue应该实例化我的第一个视图控制器的新实例并将其指定为“dest”,但看起来segue足够聪明,可以实现我想要导航到之前存在的实例VIEw Controller,而不是创建一个新实例,它分配给现有的“dest”.
有人知道以这种方式使用segue是否可以?它有可能是偶然的,但可能会在将来停止工作吗?我是不是在浪费内存,因为segue正在实例化一个我不打算使用的VIEw Controller?
非常感谢提前!
解决方法 >Am I wasting memory in anyway as the segue is instantiating a VIEw
Controller I’m not going to use?
是的先生!通过使用segue,您可以有效地分配一个新的视图控制器,因为它需要为您的自定义segue设置DestinationController属性.自己测试:在你的根控制器中添加一个静态计数器,每次初始化这个类时都会增加它,并在你的视图中显示它:每当你使用这个技巧d出到root时,你会看到它会增加.
>
Does anybody kNow if using segues in this way is ok?
只要你有效地浪费记忆,不!
这个问题至少有一个解决方案:在你的(voID)执行实现中释放segue的DestinationController.这真的很快实现,但有点丑,因为你每次都分配并立即释放你的视图控制器……即使它比泄漏更好,也不是我称之为好的做法!
在我看来,实现你想要的更好的方法是不使用segue进行转换,只是使用按钮或其他任何东西并调用popToRootVIEwController:触摸此按钮时动画.
>
Is it possible that it works by chance but might stop working in the
future?
对于我建议的第一个解决方案和你目前的方式,我认为没有理由:这些都不是复杂的调整,只是“糟糕实施”的标准导航.第二种解决方案完全正常,所以不用担心.
总结以上是内存溢出为你收集整理的ios – 使用自定义segue在导航堆栈上向后移动全部内容,希望文章能够帮你解决ios – 使用自定义segue在导航堆栈上向后移动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)