使用Archive/Unarchive方式进行Deep Copy

int main(int argc, char *argv[])
{
    @autoreleasepool {
        NSData *data = nil;
        NSMutableArray *dataArray = [NSMutableArray arrayWithObjects:
                                     [NSMutableString stringWithString:@"One"],
                                     [NSMutableString stringWithString:@"Two"],
                                     [NSMutableString stringWithString:@"Three"],
                                     nil];
        
        NSMutableArray *dataArray2 = nil;
        NSMutableString *mStr;
        
//        data = [NSKeyedArchiver archivedDataWithRootObject:dataArray];
//        if (data == nil) {
//            NSLog(@"Archive data failed!");
//            return 1;
//        }
//        
//        dataArray2 = [NSKeyedUnarchiver unarchiveObjectWithData:data];
//        if (dataArray2 == nil) {
//            NSLog(@"Unarchive data failed!");
//            return 2;
//        }
        
        // make it ONE statement
        dataArray2 = [NSKeyedUnarchiver unarchiveObjectWithData:
                      [NSKeyedArchiver archivedDataWithRootObject:dataArray]];
        
        mStr = [dataArray2 objectAtIndex:0];
        [mStr appendString:@"ONE..."];
        
        NSLog(@"dataArray =====================");
        for (NSMutableString *item in dataArray) {
            NSLog(@"%@", item);
        }
        
        NSLog(@"dataArray2 =====================");
        for (NSMutableString *item in dataArray2) {
            NSLog(@"%@", item);
        }
    }
    
    return 0;
}

From:<Programming in Objective-C 4th Edition>



你可能感兴趣的:(archive)