美文网首页
copy理解

copy理解

作者: 刚刚8888 | 来源:发表于2017-11-17 10:59 被阅读0次

copy/mutableCopy

因为:

copy执行后得到的结果永远是不可变对象。

mutableCopy执行后得到的结果永远是可变对象。

所以:

不可变对象copy是浅拷贝 只拷贝指针,可变对象copy是深拷贝 拷贝数据

不可变对象或可变对象mutableCopy是深拷贝 拷贝数据


NSString *string = @"11111";

NSString *copyString = [string copy];

NSMutableString *mutableCopyString = [string mutableCopy];

[mutableCopyString appendString:@"aaa"];

NSLog(@"\n%@\n%@",copyString,mutableCopyString);

NSLog(@"\nstring = %p copyString = %p mutableCopyString = %p", string, copyString, mutableCopyString);

屏幕快照 2017-11-17 下午12.26.31.png
  • 非系统数据类型对象拷贝需要实现copyWithZone或mutableCopyWithZone方法

否则会崩溃

而且都是深拷贝 重新开辟空间 拷贝数据

XXModel *model = [[XXModel alloc] init];

model.id = 1;

XXModel *copyM = [model copy]; // 崩溃

//崩溃信息: -[XXModel copyWithZone:]:  unrecognized selector sent to instance

解决:

#import "XXModel.h"

@interface XXModel() <NSCopying>

@end

@implementation XXModel

- (id)copyWithZone:(NSZone *)zone

{

    XXModel *model = [[XXModel allocWithZone:zone] init];

    model.id = self.id;

    return model;

}

@end
  • @property (nonatomic, copy) NSString *name;

因为

copy执行后得到的结果永远是不可变对象。

mutableCopy执行后得到的结果永远是可变对象。

所以

copy修饰属性后,属性赋值不可变数据则相当于复制指针,属性赋值可变数据相当于复制数据,类似[name copy];


NSMutableString *string = [NSMutableString stringWithFormat:@"222"];

XXModel *model = [[XXModel alloc] init];

model.name = string;

// 不能改变model.name的值,因为其内部copy新的对象

[string appendString:@" 333"];

NSLog(@"name = %@", model.name);

//输出: name = 222

相关文章

  • copy理解

    copy/mutableCopy 因为: copy执行后得到的结果永远是不可变对象。 mutableCopy执行后...

  • 对Copy 和 MutableCopy全面理解

    对Copy 和 MutableCopy全面理解 总是觉得对于copy和mutableCopy已经很理解了,但是前两...

  • copy&MutableCopy

    面试中很喜欢 问copy和MutableCopy,在这里总结下!! 首先理解 copy 的含义,copy的初衷是,...

  • 理解copy与mutableCopy

    个人理解,如有不正确的地方望斧正。 顾名思义,mutable:可变的。如:NSMutableArray,可变数组;...

  • Copy基础理解(一)

    关于oc深浅拷贝问题可能做过ios开发的都有了解到,尤其是面试特别喜欢问深浅拷贝的问题.但大多有点误区,即便是有几...

  • Copy深入理解

    原文地址:https://www.zybuluo.com/MicroCai/note/50592概念对象拷贝有两种...

  • iOS底层原理 - 内存管理 之 copy

    面试题引发的思考: Q: 谈一谈对copy、mutableCopy、浅拷贝、深拷贝的理解? copy:不可变拷贝,...

  • [iOS 内存管理] 浅拷贝(Shallow Copy)与深拷贝

    概念 拷贝的方式有两种:浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。 从字面意思理解,浅拷贝...

  • iOS copy 和strong 的区别

    copy 和 strong 的理解 这是一遍很好的文章

  • iOS知识点(上)

    请简述你对协议的理解 如何理解ARC自动引用计数机制 如何理解 retain/copy/assign/releas...

网友评论

      本文标题:copy理解

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