苹果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的关系》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python灰帽子

Python灰帽子

[美] Justin Seitz / 丁赟卿 译、崔孝晨 审校 / 电子工业出版社 / 2011-3 / 39.00元

《Python灰帽子》是由知名安全机构Immunity Inc的资深黑帽Justin Seitz主笔撰写的一本关于编程语言Python如何被广泛应用于黑客与逆向工程领域的书籍。老牌黑客,同时也是Immunity Inc的创始人兼首席技术执行官(CTO)Dave Aitel为这本书担任了技术编辑一职。书中绝大部分篇幅着眼于黑客技术领域中的两大经久不衰的话题:逆向工程与漏洞挖掘,并向读者呈现了几乎每个......一起来看看 《Python灰帽子》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码