对象复制

copy与mutableCopy方法


copy:
copy方法用于复制对象的副本。通常来讲,copy方法总是返回对象的不可修改的副本,即使该对象本身是可修改的。

mutableCopy:
mutableCopy方法用于复制对象的可变副本。通常来说,mutableCopy方法总是返回该对象可修改的副本,即使被复制的对象本身是不可修改的,调用mutableCopy方法复制出来的副本也是可修改的。

总结:
无论如何,copy和mutableCopy返回的总是原对象的副本,当程序对复制的副本进行修改时,原对象通常不会受到影响。

通过一个小例子来理解

	//
//  main.m
//  对象复制
//
//  Created by 星星leslie on 2019/6/4.
//  Copyright © 2019 星星leslie. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableString* book = [NSMutableString stringWithString: @"疯狂iOS讲义"];
        //复制book字符串的可变副本
        NSMutableString* bookCopy = [book mutableCopy];
        //修改副本,对原字符串没有任何影响
        [bookCopy replaceCharactersInRange: NSMakeRange(2, 3) withString: @"Android"];
        //此处看到原字符串的值没有改变
        NSLog (@"%@", book);
        //字符串副本发生了改变
        NSLog (@"%@", bookCopy);
        NSString* str = @"fkit";
        //复制str(不可变字符串)的可变副本
        NSMutableString* strCopy = [str mutableCopy];
        //向可变字符串后面追加字符串
        [strCopy appendString: @".org"];
        NSLog (@"%@", strCopy);
        //调用book(可变字符串)的copy方法,程序返回一个不可修改的副本
        NSMutableString* bookCopy2 = [book copy];
        //由于bookcopy2是不可修改的,因此下面的代码将会出现错误
        [bookCopy2 appendString: @"aa"];
    }
    return 0;
}

运行结果如下:
运行结果如图
由运行结果可以看出,当程序复制对象的副本后,对副本所做的任何修改,对原始对象本身并没有任何影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值