如果我有这样的方法:
-(NSArray *)methodThatReturnsAnArray;
这是它的实施:
-(NSArray *)methodThatReturnsAnArray {
NSMutableArray *aMutableArray = [[NSMutableArray alloc] init];
[aMutableArray addObject:@"some string"];
return aMutableArray;
}
Objective-C会在返回时隐式地将aMutableArray
强制转换为NSArray
,还是必须像这样指定:
return (NSArray *)aMutableArray;
答案 0 :(得分:3)
NSMutableArray
是NSArray
的子类,所以是的,你不必进行类型转换。这是教科书subtype polymorphism。
答案 1 :(得分:2)
与面向对象语言中的inheritance一样,由于NSMutableArray
从NSArray
类扩展到IS A NSArray
,所以效果都很好。
您无需将其投放到NSArray
,因为它已经是NSArray
,或者在实践中,它能够响应NSArray
可以发送的所有邮件回复it can be used in replacement to it。
答案 2 :(得分:0)
您只需返回NSMutableArray
对象,因为它是NSArray
的子类。
请注意,它仍然是一个可变数组。通常这不是问题,但如果你想确保它不可变,你必须创建一个新的实例或副本。
return [NSArray arrayWithArray:aMutableArray];
答案 3 :(得分:0)
强制转换不会更改对象的类型。它只是告诉编译器它应该假设它是某种类型的对象。但(NSArray *)aMutableArray
仍然是NSMutableArray
。