gpt4 book ai didi

objective-c - 基本的Objective-C类型转换问题

转载 作者:行者123 更新时间:2023-12-01 19:27:17 24 4
gpt4 key购买 nike

考虑以下代码:

if([obj isKindOfClass:[NSString class]])  {
NSString *s = [(NSString *)obj stringByAppendingString:@"xyzzy"];
}

我在这里有点困惑。 if语句检查 obj是否属于 NSString类。如果是的话,它将对象和附加字符串分配给 NSString *s,我能正确理解吗?如果是这样,为什么还要将其转换为 (NSString *)if语句是否已经检查过,并且不需要进行类型转换?

只说一句不是很好吗?
NSString *s = obj stringByAppendingString:@"xyzzy"];
提前致谢。

最佳答案

这完全取决于obj的定义方式。如果是id obj,则不需要强制转换,但是如果将其定义为NSObject *obj,则必须强制执行强制转换以禁止编译器警告stringByAppendingString:上未定义NSObject。不需要强制转换来使代码在运行时工作,它只告诉编译器“正确”的类型,因此可以告诉该方法是否应存在于对象上。
id不需要强制类型转换的原因是,id表示“任何类型的对象”,而NSObject *表示“NSObject类型的对象”。

关于objective-c - 基本的Objective-C类型转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399188/

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