苹果Cocoa框架中关于NSView和NSViewController的关系
栏目: Objective-C · 发布时间: 5年前
内容简介:开始接触苹果的 GUI 框架时,经常对 NSView/UIView 和NSViewControoler/UIViewController 的关系感到疑惑,因为包括 Windows 界面开发在内的很多GUI框架,都只有 View,而没有 ViewController 的概念。而且在很长一段时间的实际使用中,也经常感到 ViewController 是多余,特别是开发自定义 View,逻辑代码者写在 View 类中更方便。虽说 View 和 ViewController 是 MVC中 的概念,但我想从内存管理的
开始接触苹果的 GUI 框架时,经常对 NSView/UIView 和NSViewControoler/UIViewController 的关系感到疑惑,因为包括 Windows 界面开发在内的很多GUI框架,都只有 View,而没有 ViewController 的概念。而且在很长一段时间的实际使用中,也经常感到 ViewController 是多余,特别是开发自定义 View,逻辑代码者写在 View 类中更方便。
虽说 View 和 ViewController 是 MVC中 的概念,但我想从内存管理的角度来说说为什么 ViewController 必须存在。假设在这样的场景,这一个用户界面,上面随机地生成不定数量的框,然后把我们的 subview 添加到其中一个框里面。因为这些框是随机生成的,所以某一个代码框的对象可能在生成之后又被销毁了。如果这个框对象(也即 subview 的父节点)在被销毁时,也把 subview 销毁,那就不符合预期了。同时,也不能在销毁框之前把 subview 从框中移除,因为从代码逻辑上这样的实现并不优雅,而且违反很多代码的逻辑。
所以,subview 的内存应该次给父节点之外的其它对象管理,自然而然地想到给 subview 创建一个 ViewController,逻辑上表示 View 属于 ViewController,由后者管理其内存,这样逻辑上比较通。不然只能交给业务代码管理,这样逻辑上不太合理。
同时,允许存在不属于任何一个 ViewController 的独立的 View,实践上需要这种规则,例如我们动态地给某个父节点添加子节点,并且希望在销毁父节点时自动销毁子节点,因为这样代码更简洁。
所以,有两个动机:
1. 希望有些情况下销毁父节点时,不自动销毁子节点。
2. 希望有些情况下销毁父节点时,自动销毁子节点。
解决方案是 ViewController 和引用计数。
这是 GUI 框架设计的一种思路。
以上所述就是小编给大家介绍的《苹果Cocoa框架中关于NSView和NSViewController的关系》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- WWDC19 苹果宣布全新的 UI 框架 SwiftUI
- 苹果发布全新 Swift UI 框架:一次编码,五端通用
- 苹果WWDC全程回顾:iTunes退役,苹果第五大系统诞生
- 一文看懂苹果WWDC19:无法复制的苹果生态更加强大
- 库克推特改名蒂姆·苹果,如何在iPhone上打出苹果Logo
- iOS开发者向苹果提出集体诉讼:直指苹果税和年费
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。