如何addObjectsFromArray目的地是可变的,源是不可变的?

时间:2012-03-30 19:34:45

标签: objective-c nsmutablearray nsarray

如果我在NSMutableDictionary“分类”

中有一个可变数组“codes”
  NSMutableArray *myMutableArray=(NSMutableArray*)[categorize objectForKey:@"codes"];

我在NSDictionary“templateCategorize”中添加来自另一个非可变数组“templateCodes”的对象

  [codes addObjectsFromArray:(NSArray*)[templateCategorize objectForKey:@"templateCodes"]];

代码数组是否变为“不可变”,因为我从非可变数组(templateCodes)复制了元素?

此代码在第一次复制对象时有效,但第二次执行此代码时,出现“addObjectsFromArray”选择器无效的错误,表明该数组是不可变的。

2 个答案:

答案 0 :(得分:3)

我不认为它应该使你的可变数组不可变 - 一个可变数组可以包含不可变对象,所以从另一个数组添加对象不应该使它不可变。这段代码工作正常:

NSArray *theData = [NSArray arrayWithObjects:@"One",@"Two",@"Three",nil];
NSMutableArray *mut = [NSMutableArray arrayWithObjects:@"Four",@"Five",@"Six",nil];
[mut addObjectsFromArray:theData];
NSLog(@"%@",mut);
NSLog(@"%@",[mut class]);
[mut addObject:@"seven"];
NSLog(@"%@",mut);

我的代码中还有其他一些我没有看到的东西。

答案 1 :(得分:0)

来自Apple文档中的NSCopying协议:

  

讨论

     

返回的对象由发件人隐式保留,发件人负责释放它。如果考虑“immutable vs. mutable”适用于接收对象,则返回的副本是不可变的;否则副本的确切性质由班级决定。