gpt4 book ai didi

objective-c - Objective C casting (id) 与 casting as an explicit class

转载 作者:行者123 更新时间:2023-12-02 08:34:11 24 4
gpt4 key购买 nike

通常在 Objective-C 中,您知道一个对象是一种特定的类,因此您将其转换为该类以继续使用它:

NSObject *object;
NSString *string = (NSString *)object;

但是,这已经困扰了我一段时间 - 在该转换中写出“NSString *”与较短的 (id) 相比是否有任何优势:

NSObject *object;
NSString *string = (id)object;

我通常喜欢冗长的 Objective-C,因为该语言是为可读性而设计的,但我想不出在这种情况下冗长有什么好处。

最佳答案

只要您能为编译器提供有关正在运行的类型的更精确和准确信息,编译器就能越多地验证您的代码。 id 类型基本上意味着 *这个东西响应我见过的任何方法声明`给编译器,其中特定的转换将它缩小到仅类支持的方法。

一般来说,要避免转换。它们通常表示架构不佳。不过,并非总是如此,因为在动态生成 UI 或解析 JSON 时它们通常是不可避免的。

在这种情况下,归结为这样的构造通常会很有帮助:

NSObject *object;
NSAssert((!object) || [object isKindOfClass:[NSString class]]);
NSString *string = (NSString *)object;

这强制验证我比编译器更了解到运行时。 (而且,是的,在这种情况下,它明确允许 nil 通过......您的具体需求可能会有所不同。)

关于objective-c - Objective C casting (id) 与 casting as an explicit class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23450333/

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