1

如果我有这样的方法:

-(NSArray *)methodThatReturnsAnArray;

这是它的实现:

-(NSArray *)methodThatReturnsAnArray {

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

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

    return (NSArray *)aMutableArray;
4

4 回答 4

3

NSMutableArray是 的子类NSArray,所以是的,您不必进行类型转换。这是教科书的亚型多态性

于 2012-10-28T22:35:50.880 回答
2

与一般面向对象语言中的继承NSMutableArray一样,由于从NSArray类扩展,它在所有效果上都是A。 NSArray

您不需要将其强制转换为 a ,NSArray因为它已经是 a NSArray,或者在实践中,它能够响应 anNSArray可以响应的所有消息,因此可以使用它来替代它

于 2012-10-28T22:35:25.440 回答
0

您可以简单地返回该NSMutableArray对象,因为它是NSArray.

请注意,它仍然是一个可变数组。通常这不是问题,但如果你想确保它是不可变的,你必须创建一个新实例或副本。

return [NSArray arrayWithArray:aMutableArray];
于 2012-10-28T22:34:47.803 回答
0

强制转换不会改变对象的类型。它只是告诉编译器它应该假设它是某种类型的对象。但是 a(NSArray *)aMutableArray仍然是 a NSMutableArray

于 2012-10-28T22:36:01.543 回答