以下代码段中的解析之间有什么区别。 在解析中哪些代码段更快?
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];
答案 0 :(得分:3)
你在两个片段中都有同样的错误,为对象分配内存,然后为数据分配其他内容,这会使你丢失之前的内容(并且有内存泄漏),例如:这样:
NSMutableArray *data = [[NSMutableArray alloc] init];
data = [NSMutableArray arrayWithArray:arr];
应该是
NSMutableArray *data = [NSMutableArray arrayWithArray:arr];
现在问题本身:
第一种情况是一个坏主意,你施放NSArray,但你可以修改它,因为你没有真正改变它的类型,只将它分配给NSMutaleArray指针。
第二种情况会创建一个新的NSMutableArray,它是可变的,带有NSArray的内容,这很酷,你现在可以改变这个数组。
答案 1 :(得分:1)
看起来你想要的是:
NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil];
NSMutableArray *data = [arr mutableCopy];
或:
NSMutableArray *data = [[NSMutableArray alloc] initWithObjects:@"Apple",@"Macbook", nil];