如果我在NSMutableDictionary“分类”
中有一个可变数组“codes” NSMutableArray *myMutableArray=(NSMutableArray*)[categorize objectForKey:@"codes"];
我在NSDictionary“templateCategorize”中添加来自另一个非可变数组“templateCodes”的对象
[codes addObjectsFromArray:(NSArray*)[templateCategorize objectForKey:@"templateCodes"]];
代码数组是否变为“不可变”,因为我从非可变数组(templateCodes)复制了元素?
此代码在第一次复制对象时有效,但第二次执行此代码时,出现“addObjectsFromArray”选择器无效的错误,表明该数组是不可变的。
答案 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”适用于接收对象,则返回的副本是不可变的;否则副本的确切性质由班级决定。