gpt4 book ai didi

objective-c - mutableCopy 是否使包含的对象可变?

转载 作者:行者123 更新时间:2023-12-03 16:24:03 26 4
gpt4 key购买 nike

myArray 是 NSDictionary 对象的 NSArray。 [myArray mutableCopy] 包含原始 NSDictionary 对象还是 NSMutableDictionary 副本?有没有一种简单的方法可以使不可变的对象图完全可变?

最佳答案

如果您不介意大型对象图所需的时间,并且您实际上想要对象的深拷贝,则可以序列化对象图,然后反序列化它。最简单的方法(假设所有对象都是 Foundation Collection 对象)是使用 NSPropertyListSerialization类(class)。将根对象序列化为数据,然后使用 NSPropertyListMutableContainersAndLeaves 选项反序列化为可变根级数组。您生成的根级可变数组将是深层复制,并且所有容器都将是可变的。重要的是要记住,这实际上是一个深层复制,因此如果您更改另一个容器中的某些内容,该更改将不会反射(reflect)在原始对象中。

这是一个快速代码示例:

// Assumes the root-level object is an array, adjust as necessary
- (NSMutableArray*)deepMutableCopyOfArray:(NSArray*)array error:(NSError**)outError
{
NSError* error = nil;
NSData* serializedData = [NSPropertyListSerialization dataWithPropertyList:array format:NSPropertyListBinaryFormat_v1_0 options:0 error:&error];
if( !serializedData ) {
if( outError ) *outError = error;
return nil;
}

NSMutableArray* mutableCopy = [[NSPropertyListSerialization propertyListWithData:serializedData options:NSPropertyListMutableContainersAndLeaves format:NULL error:&error] retain];
if( !mutableCopy ) {
if( outError ) *outError = error;
return nil;
}

return mutableCopy;
}

关于objective-c - mutableCopy 是否使包含的对象可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8661770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com