Ios NSString的NSMutableArray有一个bug?

Ios NSString的NSMutableArray有一个bug?,ios,objective-c,nsstring,nsmutablearray,Ios,Objective C,Nsstring,Nsmutablearray,在这段代码的末尾,我希望数组包含@“2”、“3”、“5” 但它包含0x00000、@“2”、“3” 如何修复它?数字只是一个例子,可以有各种长度的字符串,用空格分隔 已更新 这很奇怪,但它确实会将2、3、5写入控制台 但这里是调试窗口中的相同数组: 为什么不使用ARC?我已经使用ARC测试了该代码,它可以正常工作。那么,你能再解释一下你想做什么吗?(我无法将其添加为注释)为什么不使用ARC?我已经使用ARC测试了该代码,它可以正常工作。那么,你能再解释一下你想做什么吗?(我无法将其添加为注释)为

在这段代码的末尾,我希望数组包含@“2”、“3”、“5”

但它包含0x00000、@“2”、“3”

如何修复它?数字只是一个例子,可以有各种长度的字符串,用空格分隔

已更新

这很奇怪,但它确实会将2、3、5写入控制台

但这里是调试窗口中的相同数组:


为什么不使用ARC?我已经使用ARC测试了该代码,它可以正常工作。那么,你能再解释一下你想做什么吗?(我无法将其添加为注释)

为什么不使用ARC?我已经使用ARC测试了该代码,它可以正常工作。那么,你能再解释一下你想做什么吗?(我无法将其添加为注释)

为什么不使用ARC?我已经使用ARC测试了该代码,它可以正常工作。那么,你能再解释一下你想做什么吗?(我无法将其添加为注释)

为什么不使用ARC?我已经使用ARC测试了该代码,它可以正常工作。那么,你能再解释一下你想做什么吗?(我无法将其添加为注释)

不确定为什么您的代码不能正常工作,它对我很好,也尝试了以下其他方式:-

NSString *str = @"1 2 3 4 5";
NSMutableArray *strArray = [[[str componentsSeparatedByString:@" "] mutableCopy] autorelease];
[strArray removeObjectAtIndex:3];
[strArray removeObjectAtIndex:0];

不知道为什么你的代码不工作,它对我来说工作很好,还尝试了以下其他方式:-

NSString *str = @"1 2 3 4 5";
NSMutableArray *strArray = [[[str componentsSeparatedByString:@" "] mutableCopy] autorelease];
[strArray removeObjectAtIndex:3];
[strArray removeObjectAtIndex:0];

不知道为什么你的代码不工作,它对我来说工作很好,还尝试了以下其他方式:-

NSString *str = @"1 2 3 4 5";
NSMutableArray *strArray = [[[str componentsSeparatedByString:@" "] mutableCopy] autorelease];
[strArray removeObjectAtIndex:3];
[strArray removeObjectAtIndex:0];

不知道为什么你的代码不工作,它对我来说工作很好,还尝试了以下其他方式:-

NSString *str = @"1 2 3 4 5";
NSMutableArray *strArray = [[[str componentsSeparatedByString:@" "] mutableCopy] autorelease];
[strArray removeObjectAtIndex:3];
[strArray removeObjectAtIndex:0];

删除你的自动释放!为我工作很好

NSString *str = @"1 2 3 4 5";
NSArray *arr1= [str componentsSeparatedByString:@" "];
NSMutableArray *strArray=[NSMutableArray arrayWithArray:arr1];
[strArray removeObjectAtIndex:3];
[strArray removeObjectAtIndex:0];
NSLog(@"%@",strArray);

Output:-

2
3
5
2013-10-16 14:29:35.537注释[566:c07]strArray=( 2. 3. 5.
)删除您的自动释放!为我工作很好

NSString *str = @"1 2 3 4 5";
NSArray *arr1= [str componentsSeparatedByString:@" "];
NSMutableArray *strArray=[NSMutableArray arrayWithArray:arr1];
[strArray removeObjectAtIndex:3];
[strArray removeObjectAtIndex:0];
NSLog(@"%@",strArray);

Output:-

2
3
5
2013-10-16 14:29:35.537注释[566:c07]strArray=( 2. 3. 5.
)删除您的自动释放!为我工作很好

NSString *str = @"1 2 3 4 5";
NSArray *arr1= [str componentsSeparatedByString:@" "];
NSMutableArray *strArray=[NSMutableArray arrayWithArray:arr1];
[strArray removeObjectAtIndex:3];
[strArray removeObjectAtIndex:0];
NSLog(@"%@",strArray);

Output:-

2
3
5
2013-10-16 14:29:35.537注释[566:c07]strArray=( 2. 3. 5.
)删除您的自动释放!为我工作很好

NSString *str = @"1 2 3 4 5";
NSArray *arr1= [str componentsSeparatedByString:@" "];
NSMutableArray *strArray=[NSMutableArray arrayWithArray:arr1];
[strArray removeObjectAtIndex:3];
[strArray removeObjectAtIndex:0];
NSLog(@"%@",strArray);

Output:-

2
3
5
2013-10-16 14:29:35.537注释[566:c07]strArray=( 2. 3. 5.
)以下是我认为正在发生的事情。如果有什么问题的话,那就是调试器中有一个bug

现在我们假设
NSMutableArray
在内部由一个普通的C数组表示。
-removeObjectAtIndex:
的简单实现会将要删除的对象之后的所有对象重新排列到数组中的上一个插槽中。这有O(n)复杂度,其中n是数组中对象的数量

优化可能是将“基本索引”与数组相关联,该数组将从提供给以索引为参数的任何方法的索引中减去。通过这种方式,
[foo removeObjectAtIndex:0]
可以通过简单地将nil分配给第一个元素并为恒定的时间复杂度增加基本索引来实现

我相信真正的实现要比这复杂得多,但以上只是用来说明这个想法


如果调试器不知道这一点,它将显示底层的C数组,就像在屏幕上显示问题一样。关键是,如果调试器不能了解对象的内部结构,那么就不能真正信任调试器。将描述打印到控制台是一种更可靠的检查对象的方法-只要
-description
有一个有用的实现。

以下是我认为正在发生的事情。如果有什么问题的话,那就是调试器中有一个bug

现在我们假设
NSMutableArray
在内部由一个普通的C数组表示。
-removeObjectAtIndex:
的简单实现会将要删除的对象之后的所有对象重新排列到数组中的上一个插槽中。这有O(n)复杂度,其中n是数组中对象的数量

优化可能是将“基本索引”与数组相关联,该数组将从提供给以索引为参数的任何方法的索引中减去。通过这种方式,
[foo removeObjectAtIndex:0]
可以通过简单地将nil分配给第一个元素并为恒定的时间复杂度增加基本索引来实现

我相信真正的实现要比这复杂得多,但以上只是用来说明这个想法


如果调试器不知道这一点,它将显示底层的C数组,就像在屏幕上显示问题一样。关键是,如果调试器不能了解对象的内部结构,那么就不能真正信任调试器。将描述打印到控制台是一种更可靠的检查对象的方法-只要
-description
有一个有用的实现。

以下是我认为正在发生的事情。如果有什么问题的话,那就是调试器中有一个bug

现在我们假设
NSMutableArray
在内部由一个普通的C数组表示。
-removeObjectAtIndex:
的简单实现会将要删除的对象之后的所有对象重新排列到数组中的上一个插槽中。这有O(n)复杂度,其中n是数组中对象的数量

优化可能是将“基本索引”与数组相关联,该数组将从提供给以索引为参数的任何方法的索引中减去。通过这种方式,
[foo removeObjectAtIndex:0]
可以通过简单地将nil分配给第一个元素并为恒定的时间复杂度增加基本索引来实现

我相信真正的实现要比这复杂得多,但以上只是用来说明这个想法

如果调试器不知道这一点,它将显示底层的C数组,就像在屏幕上显示问题一样。关键是,你不能真正信任调试器在任何事情上,它不能被期望