1、NSObject+DeepCopy.h
//
// NSObject+DeepCopy.h
// xxx
//
// Created by xys on 2018/8/4.
// Copyright © 2018年 001. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSObject (DeepCopy)
- (id)deepCopy;
@end
2、NSObject+DeepCopy.m
注:对自定义对象的深拷贝则需其遵循NSCoding协议。
//
// NSObject+DeepCopy.m
// xxx
//
// Created by xys on 2018/8/4.
// Copyright © 2018年 001. All rights reserved.
//
#import "NSObject+DeepCopy.h"
@implementation NSObject (DeepCopy)
- (id)deepCopy
{
NSData * objectData = [NSKeyedArchiver archivedDataWithRootObject:self];
if (objectData)
{
return [NSKeyedUnarchiver unarchiveObjectWithData:objectData];
}
return self;
}
@end
3、使用示例
NSString * src = @"12345";
NSString * copy = [src deepCopy];
NSLog(@"%p,%p",src,copy);
id deepCopy = [self deepCopy];
NSLog(@"%p,%p",self,deepCopy);
控制台输出
-[ViewController viewDidLoad] line:23 content:0x10f666f00,0xa000035343332315
-[ViewController viewDidLoad] line:26 content:0x7fd71351d730,0x7fd71351ea90