ecl*_*lux 2 cocoa objective-c nsmutablearray
myArray是NSDictionary对象的NSArray.请问[myArray mutableCopy]是否包含原始NSDictionary对象或NSMutableDictionary副本?有一种简单的方法可以使不可变对象图完全可变吗?
如果您不介意大对象图所需的时间,并且您实际上需要对象的深层副本,则可以序列化对象图,然后对其进行反序列化.最简单的方法(假设所有对象都是Foundation Collection Objects)是使用NSPropertyListSerialization类.将根对象序列化为数据,然后使用该NSPropertyListMutableContainersAndLeaves
选项反序列化为可变的根级别数组.您生成的根级可变数组将是一个深层副本,所有容器都是可变的.重要的是要记住,这确实是一个深层复制,因此如果您在另一个容器中更改某些内容,则该更改将不会反映在原始对象中.
这是一个快速代码示例:
// 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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2188 次 |
最近记录: |