gpt4 book ai didi

iphone - 子对象初始化为父对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:16:35 24 4
gpt4 key购买 nike

B 是类 A 的子类。

A * a = [[B alloc] init];
B * b = [[A alloc] init];

哪些是无效的,为什么?

当我输入这个时,我收到了第二条警告,但我不明白它是什么意思。它显示“不兼容的指针类型正在使用类型为‘A *’的表达式初始化‘B * __strong’”。也可能有人会告诉我是否可以使第二个表达式有效以及如何做到这一点。

最佳答案

如果 BA子类,它的实例可以在 A 的实例可以用的任何地方使用使用。反之则不然。

这是一个使用 Apple 类的真实示例:考虑 NSArray 及其子类 NSMutableArray。因为 NSMutableArray 是一个 NSArray,下面的赋值是有效的:

NSArray *myArray = [[NSMutableArray alloc] init];

但是,由于 NSArray 不一定是 NSMutableArray,下面的赋值是无效的:

NSMutableArray *myArray = [[NSArray alloc] init];

编辑 从语言的角度来看,两个赋值都是有效的:代码将要编译,如果你避开 B 的方法甚至可能运行由于 Objective C 的动态方法调度机制,A 也不支持。但是编译器无法再验证涉及该变量的代码,并告诉您其他潜在问题。

关于iphone - 子对象初始化为父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com