gpt4 book ai didi

ios - 使用不可变类分配任何可变对象,反之亦然

转载 作者:行者123 更新时间:2023-11-29 10:56:42 25 4
gpt4 key购买 nike

这对某些人来说可能听起来很奇怪..但我只是继续问这个..显然,没有人想这样做..但为了让概念更清楚,我想问一下。通常我们这样做:

NSString *myString=[[NSString alloc]init];
NSString *myString=[NSString string];

据我所知,它给出了一个 NSString 类的指针对象,但是,如果我这样做会怎样:

NSString *myString=[[NSMutableString alloc]init];
NSString *myString=[NSMutableString string];

如果发生这种情况,“string”实际上属于哪个类..并且因为我已经用一个可变类初始化了它,我可以将 NSMutableString 类的消息发送到“myString”吗,它是NSString 类 ??不管是什么情况,我能知道这背后的概念是什么吗。此外,数组、字典甚至许多其他类都可能是这样。

最佳答案

是的。您的对象的类型将是 alloc 方法使用的类型。如果你分配了 NSMutableString,那么你的对象将是 NSMutableString 类的成员。

NSString *myString=[[NSMutableString alloc]init];

这是怎么回事,你有一个指向分配对象的指针,它的类型是它的父类,所以编译器将看不到 NSMutableString 的方法,如果你试图直接调用它们,将会收到警告。

但是,你的对象仍然是 NSMutableString 类的成员,它会响应 NSMutableString 类的消息。

即使您将 myString 声明为指向 NSString 的指针,您也可以执行此测试看看我在说什么:

BOOL test = [myString isKindOfClass:[NSMutableString class]]; //this will hold true

您甚至可以执行强制转换来显式调用方法。

NSString *myString=[[NSMutableString alloc]init];
[(NSMutableString*)myString someNSMutableStringSpecificMethod];

PS:这不仅适用于可变/不可变对象(immutable对象),而且适用于所有特化类

关于ios - 使用不可变类分配任何可变对象,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17970445/

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