OC中的copy

1.所有被copy修饰的对象都会进行深copy吗?

答案:NO,例如block

全局block被copy修饰不会有任何变化

栈block被copy修饰会被copy到堆上

堆block被copy修饰,不会开辟新的内存,类似浅copy

copy/mutableCopy方法的调用

所有继承NSObject的对象都可调用,但是由于NSObject中只有声明,没有实现NSCopying和NSMutableCopying协议,所以自定义的类型调用copy/mutableCopy会报错,需要遵循并实现这两个协议

有些类默认已经实现了这两个协议,例如:NSString \NSArray\NSDictionary

像NSArray\NSDictionary等这些容器类对象只会进行单层深copy

也就是说会产生新的数组对象,但数组内的元素没有产生新对象,要想对数组进行深copy,数组内的对象元素要实现copy协议中的方法-copyWithZone:

- (id)copyWithZone:(NSZone *)zone {

    Student *copy = [[[self class] allocWithZone:zone] init];

    copy.name = [self.name copy];

    return copy;

}

并且数组也要用:

  NSMutableArray *studentsArray = [NSMutableArray new];

  [studentsArray addObject:student];

NSMutableArray *studentsArrayCopy =[[NSMutableArray alloc]initWithArray:studentsArray copyItems:YES];

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 不敢说覆盖OC中所有copy的知识点,但最起码是目前最全的最新的一篇关于 copy的技术文档了。后续发现有新...
    zyydeveloper阅读 8,845评论 4 35
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,887评论 1 32
  • 什么是copy? copy从字面意思来看就是“复制”、“拷贝”,是一个产生副本的过程。而在OC中,copy是用来复...
    Ashscar阅读 4,155评论 0 2
  • 关于OC中的copy、mutableCopy看过别人写的很多文章,平时工作中也经常用,但并没有验证过,今天来...
    MinimalismC阅读 6,957评论 0 2
  • 用户有多想要,产品未来的市场空间也就有多大。什么样的需求是用户的迫切需求呢?要是用户主动寻找解决途径、宁愿花钱也要...
    松柏先生阅读 3,762评论 0 0

友情链接更多精彩内容