首页 > 对象的复制

对象的复制

1.产生一个新的对象,对象的内容与源对象相同

 2 .源对象与新对象使用不同的内存区域

3 .需要实现NSCopying或者NSMutableCopying协议才能使用 复制功能

4 .Foundation中的基础数据类型如NSString、NSNumber等都 实现了NSCopying

5 .新对象的引用计数为1 

 NSMutableArray *array = [[NSMutableArray alloc] init];

NSMutableArray *array=[NSMutablearray  arraywithobject@"zhangsan"@"lisi"]

 

@property (nonatomic, strong) NSMutableArray *books;

 - (void)setBooks:(NSMutableArray *)books//定义属性时自动生成的,自定义时会将系统生成的覆盖

{

    _books = [books copy];//如果是copy默认生成这种方法,返回值不可变 即使使用深拷贝也会使用同一个地址

    // _books=[books mutableCopy];//返回值是可变的

    _books=self.books;//strong生成这种方法,依靠它的类可确定是否为可变或不可变

}

 

- (id)copyWithZone:(NSZone *)zone  //使用copy就必须实现这个方法,和协议

{

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

    stu->weight = weight;

    stu.age = self.age; 

//    stu.books = self.books;//浅拷贝数值一样,地址不一样

    stu.books = [self.books copy];//深拷贝数值地址都一样,俩对象共用一个存储空间

 

转载于:https://www.cnblogs.com/niang123/p/3877103.html

更多相关:

  • 点云PCL免费知识星球,点云论文速读。文章:DSP-SLAM: Object Oriented SLAM with Deep Shape Priors作者:Jingwen Wang Martin Runz Lourdes Agapito编译:点云PCL代码:https://github.com/JingwenWang95/DSP-S...

  • RAM缓存 新RAM缓存算法(CLFUS) 新的RAM缓存使用的创意来自许多缓存替换策略和算法,包括LRU,LFU,CLOCK,GDFS及2Q,它被命名为时钟周期内最小频繁使用大小算法CLFUS(Clocked Least Frequently Used by Size)。它避开了任何专利算法,具有如下特性: 均衡最近性(Rec...

  • MP4 |视频:AVC,1280×720 30 fps |音频:AAC,48 KHz,2 Ch |时长:2h 12m 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:560M C4D是一个有抱负的运动图形艺术家和设计师的重要工具。借助C4D,您可以使用3D对象、动态效果和动画来增强运动图形、模型和可视化效果。本课...

  • 文章目录先说问题:再说解决尝试1:尝试2(该尝试建议先在自己环境搭配对应业务测试通过后再现场尝试): 感谢 学无止境996同学的陪伴和vigourtyy美丽女友的支持,直到这个解决问题的深夜 先说问题: ceph 12.2.1生产环境:3副本 tier + 3副本data 机房在拥有业务的情况下重启集群交换机,产生如下场景...

  • 这周主要学习了java中的类和对象的知识点,发现和C++中的类和对象极为相似,对于类和对象的概念理解起来也简单。同时在自学的过程中也把类的知识重新复习巩固了一下(如类的三大特征:继承,封装和多态,构造,成员对象的访问权限,构造,无参有参函数的调用等),同时也了解到一些新的概念,比如类对象创建和引用占据堆内存和栈内存,输出对象时默认调...

  • nan 是not a number ,inf是无穷大 numpy.nan_to_num(x): 使用0代替数组x中的nan元素,使用有限的数字代替inf元素...

  • 简介 Simple Reference  基础CUDA示例,适用于初学者, 反映了运用CUDA和CUDA runtime APIs的一些基本概念.Utilities Reference  演示如何查询设备能力和衡量GPU/CPU 带宽的实例程序。Graphics Reference  图形化示例展现的是 CUDA, OpenGL,...

  • 在做开发的过程中难免需要给内核及下载的一些源码打补丁,所以我们先学习下Linux下使用如如何使用diff制作补丁以及如何使用patch打补丁。...

  • 我在调研ATS 4.2.3挂载SSD的过程中,遇到很多坑,特此详细记录我摸索的主要过程,以便大家以后避免之。 基本思路可以完全照搬参考文献[2][3] 下面的安装假定是以root用户身份进行的,Linux服务器已经安装好系统,磁盘已经做好分区。 首先需要认识我们的Linux服务器的硬件配置和软件情况 硬件配置: DELL...

  • 该博文整理一些在使用stl编程过程中遇到的小经验: 1.在多线程环境下面打印调试,如何使用cout及时刷新到屏幕上? 在C中我们经常这样使用: printf("Hello World "); fflush(stdout); 如果使用stl,我们可以这样使用: cout << "Hello World" << endl <...