美文网首页
OC中的copy

OC中的copy

作者: 黑夜中的星辰 | 来源:发表于2019-11-12 14:10 被阅读0次

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];

相关文章

  • OC中的copy

    什么是copy? copy从字面意思来看就是“复制”、“拷贝”,是一个产生副本的过程。而在OC中,copy是用来复...

  • OC中的copy

    前言 不敢说覆盖OC中所有copy的知识点,但最起码是目前最全的最新的一篇关于 copy的技术文档了。后续发现有新...

  • OC中的copy

    1.所有被copy修饰的对象都会进行深copy吗? 答案:NO,例如block 全局block被copy修饰不会有...

  • OC中的copy/mutableCopy

    这周由于公司招新人,面试官的一道关于copy和mutalbeCopy的问题引发了组员之间的激烈探讨,这时有位号称s...

  • OC中copy的使用

    OC中copy的作用是:利用一个源对象产生一个副本对象 特点:1、修改源对象的属性和行为,不会影响副本对象; ...

  • OC中copy的使用

    转载自https://my.oschina.net/aofe/blog/266677 摘要: 在Objective...

  • 关于 OC 中的 copy

    首先 iOS开发者都知道, 在写属性的时候, 一般 NSString 的属性都用 copy 去修饰, 那么你们有没...

  • OC iOS中的Copy

    目录 作为关键词的时候 作为函数的时候 作为关键词的时候 @property (nonatomic ,readwr...

  • 关于OC中的copy

    首先NSObject中声明了两个方法copy和mutableCopy,所以继承自NSObject的对象都可以调用。...

  • OC中的拷贝(copy)

    概念解释: 浅拷贝:1.指针拷贝,没有开辟新的内存;2.生成一个新的指针变量指向原有对象的地址;3.原有对象引用计...

网友评论

      本文标题:OC中的copy

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