gpt4 book ai didi

ios - NSString stringWithFormat 返回类型,为什么是 "id"?

转载 作者:可可西里 更新时间:2023-11-01 04:21:33 29 4
gpt4 key购买 nike

为什么方法 [NSString stringWithFormat] 返回一个 id 类型?从我期望的名称来看,它返回一个 NSString,而不是一个通用指针。其他类遵循此“规则”。例如 [NSNumber numberWithInt] 返回一个 NSNumber,而不是一个 id

我认为从类似于工厂方法的事实来看,这甚至是不合理的。

最佳答案

你提到了 NSNumber,它没有任何直接的子类,所以 numberWithInt: 返回一个 NSNumber* 是安全的。 p>

NSString*(以及其他类,例如 NSSet)返回类型 id 因为它们可以有子类(NSMutableStringNSMutableSet ),它们将继承此方法。因此,这些继承调用需要返回子类类型的实例,并且由于方法命名规则,您不能仅根据返回类型进行重载。因此,它们之间需要一个共同的类型,即 id

更新:最近的发展意味着关键字 instancetype 现已可用。您可能已经注意到,很多对 id 的引用现在都替换为 instancetype。此关键字向编译器提供一个提示,即方法的返回类型与方法的接收者是同一类。

例如(我强调的是一个例子,在实际框架中可能不是这样):

NSArray:
- (instancetype)initWithArray:(NSArray*)array;

NSMutableArray:
// Inherits from NSArray

----

// Receiver is NSArray, method belongs in NSArray, returns an NSArray
[[NSArray alloc] initWithArray:@[]];

// Receiver is NSMutableArray, method belongs in NSArray, returns an NSMutableArray
[[NSMutableArray alloc] initWithArray:@[]];

关于ios - NSString stringWithFormat 返回类型,为什么是 "id"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278910/

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