NSMutableArray自动类型转换为NSArray

rak*_*hNS 2 iphone objective-c nsmutablearray

我创建了一个NSMutableArray对象

NSMutableArray *array = [[NSMutableArray alloc]init];
Run Code Online (Sandbox Code Playgroud)

和使用的方法componentsSeperatedByString:as

array = [myString componentsSeperatedByString:@"++"];
Run Code Online (Sandbox Code Playgroud)

但当我在阵列上执行操作时,

[array removeAllObjects];
Run Code Online (Sandbox Code Playgroud)

我得到了异常,例如"removeAllObjects无法识别的选择器发送到实例".

我通过修改代码解决了这个问题,

NSArray *components = [myString componentsSeperatedByString:@"++"];



array = [NSMutableArray arrayWithArray:components];
Run Code Online (Sandbox Code Playgroud)

我之后可以执行像这样的操作

[array removeAllObjects];
Run Code Online (Sandbox Code Playgroud)

我怀疑为什么NSMutableArray自动转换为NSArray?如何避免这样的自动类型转换,以防止异常?提前致谢....

law*_*cko 6

您对Objective-C的工作原理有一个错误.这一行:

NSMutableArray *array = [[NSMutableArray alloc]init];
Run Code Online (Sandbox Code Playgroud)

分配并初始化数组,指针array指向此对象.现在,这一行:

array = [myString componentsSeperatedByString:@"++"];
Run Code Online (Sandbox Code Playgroud)

使array指针指向componentsSeparatedByString方法返回的新数组.当您执行此操作时,您将丢失对已分配和未命中的可变数组的引用,如果不使用ARC,则会创建内存泄漏.