美文网首页
copy和mutableCopy的区别

copy和mutableCopy的区别

作者: 我想做女人 | 来源:发表于2017-03-17 14:44 被阅读0次

copy和mutableCopy的区别

深拷贝和浅拷贝的区别

在OC中对象的拷贝方式有两种:深拷贝和浅拷贝.浅拷贝:并不拷贝对象本身,仅仅是拷贝指向目标对象的指针,并没有拷贝内容; 深拷贝:直接拷贝整个对象内容到另外一块内存中.
总结一句话: 浅拷贝就是拷贝指针,深拷贝就是拷贝内容

系统对象的copy和mutableCopy方法

1.copy方法用于拷贝对象的副本,通常来说copy方法总是返回对象的不可变的副本.即使原来的对象是可变的.例如[NSMutableString copy] 返回的依旧是 不可变 的字符串对象

2.mutableCopy方法用于拷贝对象的可变副本 .通常来说mutableCopy方法总是返回对象的可变副本.即使被拷贝的对象是不可变的.例如:[NSString mutableCopy]返回的是 可变字符串对象

NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary分别调用copy和mutableCopy总结

拷贝的副本对象类型:
copy -->不管原来的对象是什么类型 拷贝后返回的都是 不可变对象
mutableCopy -->不管原来的对象是什么类型,拷贝后返回的都是 可变对象

是否产生新的对象:
只有不可变对象的 copy方法,才不产生新的对象,其他的都会产生新对象

拷贝的类型区分:
不产生新对象的拷贝就是浅复制,其他都是深复制

自定义对象的拷贝

自定义对象要实现copy方法,需要实现NSCopying协议和实现CopyWithZone这个协议方法.不实现的话 会报 copy方法未实现的 错误
自定义对象拷贝代码实现:

    @interface CopyPerson : NSObject<NSCopying> //要实现NSCopying协议

    @property (nonatomic,copy) NSString *name;
    @property (nonatomic,copy) NSString *address;
    @property (nonatomic,assign)NSInteger age;
    @end

实现协议方法:

-(id)copyWithZone:(NSZone *)zone{
CopyPerson *person = [[[self class] allocWithZone:zone] init];
person.name = self.name;
person.age = self.age;
person.address = self.address;
return  person;
 }

使用copy:

CopyPerson *person = [[CopyPerson alloc] init];
person.name = @"xmg";
person.address = @"中国";
person.age = 24;

CopyPerson *newPerson = [person copy];

NSLog(@"newPerson.name = %@,newPerson.address = %@,newPerson.age = %ld ",newPerson.name,newPerson.address,newPerson.age); // xmg 中国 24

相关文章

  • iOS:浅谈 深.浅拷贝与copy.strong

    概要的测试了copy与mutableCopy的区别 深.浅拷贝●copy/mutableCopy NSString...

  • 两个iOS面试题

    1.NSMutableArray和NSArray实例执行mutableCopy和copy方法的区别? 执行结果: ...

  • copy和mutableCopy的区别

    当复制对象是可变对象的时候:copy是复制部分内容,当然也不是简单的指针复制,应该是当前类的复制;mutableC...

  • copy和mutableCopy的区别

    首先以NSString为例,来看看copy和mutableCopy的区别是什么?上代码。 接下来我们来看看NSAr...

  • copy和mutableCopy的区别

    copy和mutableCopy的区别 深拷贝和浅拷贝的区别 在OC中对象的拷贝方式有两种:深拷贝和浅拷贝.浅拷贝...

  • copy和mutableCopy的区别

    mutableCopy 创建一个新的可变对象,并初始化为原对象的值,新对象的引用计数为 1; copy 返回一个不...

  • copy和mutableCopy的区别

    1,深拷贝和浅拷贝的区别 浅拷贝:并不拷贝对象本身,仅仅是拷贝指向目标对象的指针,并没有拷贝内容;深拷贝:直接拷贝...

  • iOS开发深拷贝与浅拷贝的关系

    IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解 copy与retain的区别: copy是创建...

  • copy和mutableCopy

    copy和mutableCopy copy只会产生不可变的副本对象(比如NSString) mutableCopy...

  • iOS copy和mutableCopy区别

    今天遇到一个问题,由此引起copy和mutalbeCopy的区别,不深究不觉得自己不知道,随便一问就给问住了。正文...

网友评论

      本文标题:copy和mutableCopy的区别

      本文链接:https://www.haomeiwen.com/subject/wseenttx.html