Objective-C是否在返回时将NSMutableArray隐式类型转换为NSArray?
如果我有这样的方法:Objective-C是否在返回时将NSMutableArray隐式类型转换为NSArray?,objective-c,casting,nsmutablearray,Objective C,Casting,Nsmutablearray,如果我有这样的方法: -(NSArray *)methodThatReturnsAnArray; return (NSArray *)aMutableArray; 这就是它的实施: -(NSArray *)methodThatReturnsAnArray { NSMutableArray *aMutableArray = [[NSMutableArray alloc] init]; [aMutableArray addObject:@"some string"];
-(NSArray *)methodThatReturnsAnArray;
return (NSArray *)aMutableArray;
这就是它的实施:
-(NSArray *)methodThatReturnsAnArray {
NSMutableArray *aMutableArray = [[NSMutableArray alloc] init];
[aMutableArray addObject:@"some string"];
return aMutableArray;
}
Objective-C在返回时是否将aMutableArray
隐式强制转换为NSArray
,或者我必须这样指定:
-(NSArray *)methodThatReturnsAnArray;
return (NSArray *)aMutableArray;
您只需返回
NSMutableArray
对象,因为它是NSArray
的子类
请注意,它仍然是一个可变数组。通常这不是问题,但是如果您想确保它是不可变的,您必须创建一个新实例或副本
return [NSArray arrayWithArray:aMutableArray];
您只需返回
NSMutableArray
对象,因为它是NSArray
的子类
请注意,它仍然是一个可变数组。通常这不是问题,但是如果您想确保它是不可变的,您必须创建一个新实例或副本
return [NSArray arrayWithArray:aMutableArray];
与面向对象语言中的一般情况一样,由于NSMutableArray
从NSArray
扩展而来,因此它实际上是NSArray
类
您不需要将其强制转换为NSArray
,因为它已经是NSArray
,或者在实践中,它能够响应NSArray
可以响应的所有消息。与面向对象语言中的一般情况一样,由于NSMutableArray
从NSArray
扩展而来,因此它将NSArray
分类
您不需要将其强制转换为
NSArray
,因为它已经是NSArray
,或者在实践中,它能够响应NSArray
可以响应的所有消息。NSMutableArray
是NSArray
的子类,因此您不必执行类型强制转换。这是一本教科书。NSMutableArray
是NSArray
的一个子类,因此不必执行类型转换。这是教科书。强制转换不会更改对象的类型。它只是告诉编译器它应该假设它是一个特定类型的对象。但是(NSArray*)aMutableArray
仍将是NSMutableArray
强制转换不会更改对象的类型。它只是告诉编译器它应该假设它是一个特定类型的对象。但是一个(NSArray*)aMutableArray
仍然是一个NSMutableArray
@H2CO3-该文档帮助很大。谢谢@H2CO3-该文件帮助很大。谢谢