用视图控制器类继承视图:新类会实例化基类的 UI 对象吗?

Posted

技术标签:

【中文标题】用视图控制器类继承视图:新类会实例化基类的 UI 对象吗?【英文标题】:Inheriting a view with view controller class: will the new class instantiate the base's UI objects? 【发布时间】:2011-01-08 20:11:48 【问题描述】:

我有一个基本的 View Controller 类,其中包含一个视图和一些连接到 MonoTouch 应用程序中的插座的控件,它描述了一个自定义表格单元格。从这个类中,我继承了所有其他自定义单元格。这很舒服,但我不确定继承的类是否会实例化基类的视图和子视图(从而占用双倍内存)?

基地有一个 UITableViewCell 三个 UILabel 和两个按钮。它们连接到插座,因为我需要在基类中放置一些常用功能。

继承的类添加了相同的视图,但我需要手动添加它们。它们使用与基类中的插座相同的名称连接到插座。

如果继承的类确实实例化了基类的 UI 元素及其自身,有没有办法修复它并仅使用基类的 UI 元素?

感谢阅读。

【问题讨论】:

【参考方案1】:

我会尽量回答我所理解的。让我们来看看。你有一个管理 UITableViewCell 的 UIViewController。在 IB 中,您将单元的一些控件连接到控制器。

我不明白您手动添加相同视图的意思。你为什么要这么做?

如果你从 UIViewController 继承来扩展你的基本表格单元格,它当然会包含基础的所有控件。

如果您通过向现有的 UIView 添加一堆其他 UIView 来扩展表格单元格,则现有的 UIView 不会被覆盖。

将 IB 中的视图视为对象的“序列化”版本。它们是真实的物体。这意味着如果您在 IB 中有一个按钮和一个标签,则在从 IB 加载事物时,将执行“new UIButton()”和“new UILabel()”。

如果在你的继承类中你不需要基础的东西,不要继承。

您是面向对象开发的新手吗?也许您应该首先了解继承、多态性和一般面向对象开发的基础知识 - 还是我完全误解了您的问题?

【讨论】:

您好,感谢您的回答。我是 Interface Builder 的新手,我发现它是一个非常令人困惑的工具(但话又说回来,我来自 Visual Studio)。让我问这个问题的是,在视图控制器的 .xib.designer.cs 文件中没有实例化子视图(按钮、标签等)的代码。似乎设计者只是从 .xib 文件中读取实例化指令。所以简而言之,我不确定继承的视图控制器是否也会继承 xib 文件并实例化这些按钮、标签等。 好吧,同样的问题。我已经使用 Visual Studiolized 很多年了,然后是 Xcode 和 IB - 真是一团糟! :-) 但后来我改用 MonoTouch 并在几个小时内就开始工作,因为我所有的 C# 知识都对我有帮助。就 IB 而言:是的,它是一个非常奇怪的工具。所有视图(即 UIKit 中调用的控件)都是延迟加载的。因此,您在 IB 中创建了一个出口,并且您在 dsesigner.cs.xib 中有一个属性可以访问它。它确实是 XIB 文件中的内容。如果您认为问题已回答,请勾选“已回答”。谢谢。

以上是关于用视图控制器类继承视图:新类会实例化基类的 UI 对象吗?的主要内容,如果未能解决你的问题,请参考以下文章

PHP工厂模式

类的继承与派生

JAVA 基础(面试必用)

Java基础—面向对象的三大特性

Java基础 | 关于面向对象三大特征与内存回收

为啥可以从指向实例化基类对象的强制转换指针调用非静态派生类方法?