Objective-C 对象深拷贝的另外一种方式

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值