cod*_*ork 4 objective-c nsmutablearray nsarray
在询问这个问题之前,我已经阅读了很多SO帖子,我猜这个答案就在那里,但我没有看到.我是Objective-C的新手,我正试图做一个(看似)简单的动作,我无法弄明白.
一般的想法是我有一个NSArray
充满对象(特别是类型UIImageView
).我想要复制那个数组,我已经做了很多种方式(都成功了).
复制后,我现在有两个数组.我想修改一个对象,比如索引2,只在副本中修改.
到目前为止似乎,因为副本只是复制引用(或指针),更改索引2处的对象将在副本和原始文件中更改它.
那有意义吗?
NSArray *originalArray = @[object1, object2];
Run Code Online (Sandbox Code Playgroud)
我尝试复制这个数组的方式,以便我可以实现我想要的:
NSMutableArray *originalArrayCopy = [NSMutableArray arrayWithArray:originalArray];
NSArray *originalArrayCopy = [originalArray copy];
NSMutableArray *originalArrayCopy = [[NSMutableArray alloc] initWithArray:originalArray];
Run Code Online (Sandbox Code Playgroud)
并且似乎在每种情况下,从副本修改对象也会在原始对象中修改它.
注意:虽然NSArray
显然是不可变的,但我原始数组中的对象是可变的.
rob*_*off 12
如果数组的元素符合NSCopying
协议,则可以执行以下操作:
NSMutableArray *copy = [[NSMutableArray alloc] initWithArray:originalArray copyItems:YES];
Run Code Online (Sandbox Code Playgroud)
这具有发送copy
到原始数组的每个元素的效果,将副本存储在新数组中.
如果每个元素在收到copy
消息时返回一个新的可变副本,那么这很好.但是,几个Foundation类(如NSMutableArray
和NSMutableString
)在收到copy
消息时返回不可变副本.如果您的元素属于这样的类,则需要发送mutableCopy
消息.
没有内置的公共消息可以做到这一点.你可以像这样手动完成:
NSMutableArray *copy = [[NSMutableArray alloc] initWithCapacity:originalArray.count];
for (id element in originalArray) {
[copy addObject:[element mutableCopy]];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8868 次 |
最近记录: |