iOS 页面组织 显示规则
来源:互联网 发布:linux nc 编辑:程序博客网 时间:2024/06/07 03:27
画了一个简单的组织结构 示意图,看图说话
1 每个App必须有一个window用于展示页面。
2 每个App的这个window必须有一个rootViewController,用于直接/非直接管理后续的ViewController。
3 显示规则:系统将正在显示的页面 挂载到window上,用于展示。而不展示的页面,则会从window上暂时移除(其window为nil,而他被所归属的ViewController管理生命周期),等待需要展示的时候再重新挂在window上,可以做测试,如上,制作一个简单的demo,在显示ViewController3对应的view的时候,查看ViewController2,ViewController1的view对应的window,可见是nil的。但是,在ViewController3的每一个子view上,获得到的window都是同一个。pop掉ViewController3,此时ViewController2的view及其子view的window又不是nil了,而是这个window。
4 通过查看UIView中window的接口,开始怀疑window是view缓存的一个变量,但是通过kvo,无法监测到它的变化,可见,xxView.window是一个获取接口,其实现是深度递归其父view,父辈view满足window规格即为其window。
因此,用ViewController来组织页面,用于展示的只有window和当前显示的页面的view,而不显示的view暂时被移除,以备内存紧张的时候被系统回收掉,而不影响程序正在显示的界面。这一切都不需要程序员来管理,是框架提供的。
所以,那些通过view来组织页面的App是不合乎iOSapp设计规则的,需要程序员来管理view的生命周期,缺点是:可能内存占用过大而不能灵活利用,并且维护view的逻辑代价比较大。
为了制作一个view而创建一个ViewController,然后把ViewController的这个view 添加到某个view上的做法是错的,不合乎框架规则的。
在写程序的时候,要时刻想着:我创建的这个对象,归属于谁,被谁管理(也就是谁负责他的销毁,内存的回收),这样你熟悉他的生命周期,你就熟悉你的程序在内存方面的使用情况,内存是计算机比较重要的资源,要节省资源和重复利用资源,你的App才能运行持久哇。
- iOS 页面组织 显示规则
- 页面条件显示规则
- SOAP协议组织规则
- 基于规则系统组织业务规则
- DSL:基于规则系统组织业务规则
- 后台页面组织
- iOS 判断当前页面是否显示
- IOS页面UILable显示多行文本
- iOS单一页面横屏显示
- IOS组织架构图
- iOS组织架构
- java界面设计(页面元素组织)
- 邮箱页面组织结构研究
- HTML+CSS组织html页面
- Netfilter中规则(rule)的组织框架
- 显示树状结构,组织结构图
- IOS - TabBarController 显示/隐藏第一级页面的TabBar
- iOS 指纹识别进入页面时状态栏显示重影
- 仿IOS7日期选择控件(新)
- cellForRowAtIndexPath不执行
- 我们和他们,究竟谁是傻X? | 华尔街黑历史(一)
- SOUI开篇之作
- ECharts Java 动态加载数据,echartsjava
- iOS 页面组织 显示规则
- android-Location Strategies
- 使用mailx发送邮件
- State Threads 回调终结者
- TAO和ACE在Windows平台下的编译与安装
- 递归求平均数
- appium的几点总结
- Linux下配置hadoop2.2.0集群
- java中反射的原理