我怎样才能pipe理视图控制器无限推动到导航控制器堆栈? iOS版
我有一个由UINavigationController组成的应用程序,它从3个不同的选项卡中推送ViewControllers。
我预见到的麻烦是,目前的结构允许用户无休止地将VC添加到堆栈。
我有一个叫药品的标签,另一个叫病原体。 如果您深入了解药物,您可以查看其有效防治的病原体列表,并且用户可以select一种病原体以查看有关该病原体的更多信息。 这导致应用程序推动一个新的病原体VC。
现在,用户可以深入到病原体易感染的药物列表中,并select它,这在药物标签中导致新的VC。
等等等等…
每次有额外的1.5Mb添加到内存占用。
我怎样才能最好地pipe理这个?
您应该通过释放资源来减less内存占用 ,您可以轻松地重新创build,而不是试图阻止用户将100个视图控制器推送到您的堆栈。 苹果也不这样做。
打开“iTunes Store”应用程序并search“Hugh Laurie”,select专辑“Let Them Talk”,然后select“Hu Laurie>”,然后select“Let them Talk”,然后select“Huur Laurie>”等。 你可以继续前进和前进。 当用户这么做了很长一段时间,应用程序可能会耗尽内存和崩溃。
如果您尝试将20吨砖块装载到丰田皮卡上,它可能会像空卡普里太阳袋一样被砸碎。 这是故意的破坏性行为 ,恕我直言,应用程序终止,如果用户强行尝试超载它是可以的。
但是,您可以使这一点几乎无法访问,因此通过释放离屏视图控制器中的内存,这种情况不太可能发生。 实现didReceiveMemoryWarning
(例如: 如何实现didReceiveMemoryWarning? )来释放您可以轻松地从磁盘或networking(图像,核心数据对象等)重新创build的东西。 这样,你可以把你的内存占用方式降低,用户只有在手上有几个小时的时候才能使你的应用崩溃,没有比推送视图控制器更好的了。 这将是悲伤。
你可以实现你自己的UINavigationController
子类。 你至less需要实现pushViewController:animated:
和popViewControllerAnimated:
在推送过程中,你会放弃其中一个视图控制器(从而释放内存),在popup窗口中,使用你保留的数据再次创build它。 基本上,您将从保持整个视图控制器堆栈切换到只有几个元素,用逻辑还原堆栈下的那些元素。
这是一个简单的描述。 在实际的应用程序中,您至less要保留前一个视图控制器,以便您的后退button和从侧面滑动的后退手势顺利运行。
- 内存泄漏时使用NSURLSession.downloadTaskWithURL
- NSManagedObjectContext executeFetchRequest返回不稳定的对象,导致EXC_BAD_ACCESS,SIGABRT等
- 由于CoreAnimation和CG图像的脏内存
- Xcode的 – 我的应用程序崩溃,错误是“无效指针从空闲列表中出列***在malloc_error_break设置断点debugging”
- UIWebView不使用ARC释放所有活动字节
- 如何将内存中的NSDictionary上传到Dropbox,IOS
- iOS:ARC,不释放内存
- 内存增加SpriteKit即使removeAllChildren调用
- 为什么简单的网站崩溃在移动(iOS Safari和至less)?