NSArray解析之间有什么不同?

时间:2012-04-19 17:28:41

标签: objective-c ios

以下代码段中的解析之间有什么区别。 在解析中哪些代码段更快?

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil];

NSMutableArray *data = (NSMutableArray *)arr;

(和)

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil];

NSMutableArray *data = [NSMutableArray arrayWithArray:arr];

2 个答案:

答案 0 :(得分:3)

你在两个片段中都有同样的错误,为对象分配内存,然后为数据分配其他内容,这会使你丢失之前的内容(并且有内存泄漏),例如:这样:

NSMutableArray *data = [[NSMutableArray alloc] init];
data = [NSMutableArray arrayWithArray:arr];

应该是

NSMutableArray *data = [NSMutableArray arrayWithArray:arr];

现在问题本身:

  1. 第一种情况是一个坏主意,你施放NSArray,但你可以修改它,因为你没有真正改变它的类型,只将它分配给NSMutaleArray指针。

  2. 第二种情况会创建一个新的NSMutableArray,它是可变的,带有NSArray的内容,这很酷,你现在可以改变这个数组。

答案 1 :(得分:1)

看起来你想要的是:

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil];
NSMutableArray *data = [arr mutableCopy];

或:

NSMutableArray *data = [[NSMutableArray alloc] initWithObjects:@"Apple",@"Macbook", nil];