copy和 mutableCopy方法

copy方法总是返回对象的不可修改的副本,即使对象本身是可以修改的。 例如: 调用NSMutableString的copy方法,将会得到不可修改的字符串对象。

mutableCopy方法总是返回该对象的可以修改的副本,即使被复制的对象本身是不可修改的。 例如: 调用NSString的mutableCopy方法,将会得到NSMutableString。

copy和mutableCopy返回的总是原对象的副本,当程序对复制的副本就行修改时原对象通常不会受影响。

像使用copy方法要先在接口声明是实现NSCopying协议,然后在类实现中重写-(id)copyWithZone:(NSZone *)zone方法。

想使用mutableCopy方法要实现NSMutableCopying协议,然后在类中实现mutanleCopyWithZone方法。

例如:

@interface  Copyyy : NSObject<NSCopying>
@property NSString* name;@end@implementation Copyyy-(id)copyWithZone:(NSZone *)zone{NSLog(@"复制ing");return self;
}@end
@implementation tttint main(int argc, const char * argv[]) {@autoreleasepool {Copyyy* ccc=[Copyyy new];ccc.name=@"xl";Copyyy*ccc2=[ccc copy];NSLog(@"%@",ccc2.name);}}@end

当然也可以不实现NSCopying协议,直接在实现中重写

-(id)copyWithZone:(NSZone *)zone

也可以

例如

#import "ttt.h"
#import <Foundation/Foundation.h>@interface  Copyyy : NSObject   // <NSCopying>
@property NSString* name;@end@implementation Copyyy-(id)copyWithZone:(NSZone *)zone{NSLog(@"复制ing");return self;
}@end
@implementation tttint main(int argc, const char * argv[]) {@autoreleasepool {Copyyy* ccc=[Copyyy new];ccc.name=@"xl";Copyyy*ccc2=[ccc copy];NSLog(@"%@",ccc2.name);}}@end

甚至不实现协议,不重写

-(id)copyWithZone:(NSZone *)zone

也可以

例如

#import "ttt.h"
#import <Foundation/Foundation.h>@interface  Copyyy : NSObject   // <NSCopying>
@property NSString* name;@end@implementation Copyyy//参数任意
-(id)copyWithZone:(NSObject *)zone{NSLog(@"复制ing");return self;
}
//-(id)copyWithZone:(NSData *)zone{
//    NSLog(@"复制ing");
//    return self;
//}@end
@implementation tttint main(int argc, const char * argv[]) {@autoreleasepool {Copyyy* ccc=[Copyyy new];ccc.name=@"xl";Copyyy*ccc2=[ccc copy];NSLog(@"%@",ccc2.name);}}@end

objective-c复制相关推荐

  1. 【iOS 开发】Objective-C 运算符

    博客地址 : http://blog.csdn.net/shulianghan/article/details/41624613 参考文章 : 1.[iOS 开发]Object-C 运算符 2.[iO ...

  2. 睡眠排序法-objective C版的代码

    将开发过程比较重要的代码做个珍藏,下面代码内容是关于睡眠排序法-objective C版的代码,应该能对各位朋友有帮助. @interface NSArray (SleepSort) - (void) ...

  3. 逻辑SQL Server数据复制101

    介绍 (Introduction) Data replication has been around for many decades. There are two primary types of ...

  4. 10Redis--主从复制 非常重要、一主二仆、薪火相传、反客为主、哨兵模式

    目录 主从复制 概念 主从复制的作用 为什么使用集群 环境配置 既然需要启动多个服务,就需要多个配置文件.每个配置文件对应修改以下信息: 启动 3 个redis集群 ​ 一主二从 命令方式 6379 ...

  5. 阿里云块存储企业级特性之异步复制

    前言 数据是企业的生命线 数据异地容灾是企业级客户的一个普适需求,尤其是对于政府,金融等大客户,更是核心需求.在大数据时代,数据就是企业的核心资产,是企业的生命线.在现实世界中,灾难时有发生,当发生灾 ...

  6. linux vi编辑器中的复制粘贴快捷键

    在使用vi有时会想直接复制一行数据,然后粘贴若干行进行修改 复制一行数据的方法 把光标放到要复制的一行前面,然后按两下yy字母键 yy # 复制光标所在的那一行 然后把光标放到要复制到的地方去,按键盘 ...

  7. Golang 元素值在经过通道传递时会被复制,这个复制是浅复制

    1. channel 元素值为切片 package mainimport ("fmt" )func main() {ch := make(chan []int, 3)s := [] ...

  8. Linux shell 学习笔记(1)— 文件和目录(查看、创建、复制、软硬链接、重命名及删除操作)

    1. 启动 shell /etc/passwd 文件包含了所有系统用户账户列表以及每个用户的基本配置信息: christine:x:501:501:Christine Bresnahan:/home/ ...

  9. 宿主机虚拟机文件复制 apt-get 换成yum

    这两天重新装了VMware 14 Pro和Ubuntu18.04.1.在使用中,发现无法: 从Windows主机向虚拟机的Ubuntu系统中 复制粘贴文字或者拖动文件. 在查看了VMware的文档和其 ...

  10. C++ 复制构造函数或者拷贝构造函数

    复制构造函数 是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象. 复制构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象. 复制对象把它作为参数传 ...

最新文章

  1. (转)基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用
  2. 全网最全的Postman接口自动化测试(小鸟成大鸟级攻略)
  3. python有道api-python 调用有道api接口的方法
  4. Windows11——Modern Standby(现代待机) S0改Suspend to RAM(待机到内存)S3睡眠解决方案
  5. [Swift]随slider变化而变化的圆
  6. linux文件夹重命名busy,Linux下执行程序出现 Text file busy 提示时的解决方法
  7. 分子机制研究的五个层次,你的研究在哪个层次--转载
  8. Redis的安装与常用配置说明
  9. layui 图片展示添加一个x_Layx 演示示例
  10. 电脑ping_电脑网络故障检测与维护—常用DOS命令
  11. Lesson 17.2 经典数据集(1):入门数据集,以及读数据时哪些可能的坑
  12. 求传递闭包c语言具体编程,实验一_传递闭包的实现.doc
  13. 动态更换 Shape 的颜色
  14. TensorFlow案例---概率学中的逆概率
  15. vue前端项目基于淘宝lib-flexible做手机端适配
  16. 2012新年寄语——感谢有您
  17. Windows 程序设计
  18. 用意念打字,中国脑机接口新纪录诞生!
  19. 基于Arduino的水位检测系统
  20. 百度搜霸卸载全攻略〔原创〕

热门文章

  1. closed Stream.解决办法
  2. 如何将nes游戏刻录到vcd光盘中玩?
  3. 用C++评选优秀教师和优秀学生
  4. (插件)程序员摸鱼神器,上班也可以在VSCode看股票 基金实时数据
  5. python语法--循环语句(10)
  6. 重新认识康德的“头上星空”
  7. 石河子大学师生为荣获2018年“马云乡村教师奖”校友点赞
  8. 超弦量子计算机,超弦计算机比量子计算机和生物计算机强多少
  9. 一个u盘大小的树莓派就能搭建一个服务器
  10. Win11找不到wt.exe如何解决?