iphone - 强制调用 UIViewController 子类方法

标签 iphone objective-c ios ipad uiviewcontroller

所以我将我创建的 UIViewController 子类化了。问题是,如果我正在创建的方法是父类(super class),有没有一种方法可以强制使用子类方法调用方法。我知道这很愚蠢,因为这就像强制哺乳动物称呼狗的行为一样。但在做这件事之前,我实际上是先确定那个哺乳动物是狗,否则我不会叫它。这是一件坏事吗?如果不是那么我怎么能做这样的事情?我尝试将父类(super class)转换为它的子类,然后进行方法调用,但它不起作用。有什么想法吗?

所以我想做的。我有一个 UIViewController A 和那个 B 的一个子类。如果我有 A 并且我想调用 B 的重写 A 的方法,我该怎么做?我希望这是清楚的

最佳答案

声明对象的方式与它实际是什么之间存在差异。 考虑这个例子:

Mammal *mammal = [[Dog alloc] init]; //Dog is a subclass of Mammal

在这里,您有一个指向 Mammal 对象的指针,该对象实际上指向专门的 Dog 类的一个实例。这是有效的,因为哺乳动物拥有狗所拥有的所有方法。

您可以使用 isKindOfClass: 检查某些 Mammal 实例是否实际上是 Dog,如下所示:

if ([mammal isKindOfClass:[Dog class]]) {
    [(Dog *)mammal bark];
}

这是完全正确的。但是,如果您使用 [[Mammal alloc] init] 创建了您的 mammal,则对 Dog 类的检查将失败,您将不会能够调用只有 Dog 拥有的任何方法。如果你不做检查,这实际上会崩溃,因为转换不会以任何方式改变对象,它只是告诉编译器“我知道我在做什么,不要警告我”。

关于iphone - 强制调用 UIViewController 子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137028/

相关文章:

iphone - 如何将 NSString HTML 标记转换为纯文本 NSString?

iphone - 如何从表格 View 中完全隐藏某个单元格?

ios - 如何在应用程序处于后台时将推送通知有效负载插入数据库

ios - 更改未选择的标签栏项目的颜色

ios - 显示键盘时 UITextView ScrollView 不移动

ios - 如何从 webView 解析数据以在代码中使用

iphone - 具有特定扩展 objective-c 的文件搜索

iphone - UILabel 中的图标无法正确显示

objective-c - 数组。如何实现 map 功能?

objective-c - 制作线条动画的最简单方法是什么?