Objective-C是否在返回时隐式地将NSMutableArrays强制转换为NSArrays?

时间:2012-10-28 22:33:14

标签: objective-c casting nsmutablearray

如果我有这样的方法:

-(NSArray *)methodThatReturnsAnArray;

这是它的实施:

-(NSArray *)methodThatReturnsAnArray {

    NSMutableArray *aMutableArray = [[NSMutableArray alloc] init];
    [aMutableArray addObject:@"some string"];
    return aMutableArray;
}

Objective-C会在返回时隐式地将aMutableArray强制转换为NSArray,还是必须像这样指定:

    return (NSArray *)aMutableArray;

4 个答案:

答案 0 :(得分:3)

NSMutableArrayNSArray的子类,所以是的,你不必进行类型转换。这是教科书subtype polymorphism

答案 1 :(得分:2)

与面向对象语言中的inheritance一样,由于NSMutableArrayNSArray类扩展到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