gpt4 book ai didi

objective-c - 最好在转换之前检查对象的类别吗?

转载 作者:太空狗 更新时间:2023-10-30 04:00:27 24 4
gpt4 key购买 nike

我应该只转换一个变量,还是使用 isKindOfClass: 检查它然后转换?哪一个会更好、更有效率? (好吧,效率暂时不是问题。)我希望下面的 string 是一个 NSString

例子:

NSString *string = (NSString *)result;

或:

if(![string isKindOfClass:[NSString class]]
{
//cast it
}

最佳答案

转换没有任何运行时效果。这只是给编译器的一条消息,表明您确定可以将一种类型分配给另一种类型(当您获得 id 时,它还会消除有关“可能无法响应”的警告) .

NSString * s = (NSString *)[NSNumber numberWithInt:0];
// The compiler will let you do this, but it's pointless, because:
[s floatValue]; // Okay; NSNumber also implements -floatValue
[s lowercaseString]; // Crashes; s is still an NSNumber instance,
// which doesn't respond to -lowercaseString

另一方面,isKindOfClass: 在编译时没有任何效果;就像任何其他消息一样,它在运行时发送,然后确定其结果。

我不确定您要实现什么目标,但我想不出通过结合这两种机制可以完成什么有用的事情。

没有理由在转换之前发送 isKindOfClass:,但不是出于您认为的原因。您要么在编译时知道该类,在这种情况下 isKindOfClass: 是没有意义的,要么您不知道,在这种情况下转换是无效的。

关于objective-c - 最好在转换之前检查对象的类别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8996016/

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