Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C是否在返回时将NSMutableArray隐式类型转换为NSArray?_Objective C_Casting_Nsmutablearray - Fatal编程技术网

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-该文件帮助很大。谢谢