IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> OC中对象的复制:一 -> 正文阅读

[移动开发]OC中对象的复制:一

看官们,我们在前面章回中介绍了OC中的属性特性,本章回中将介绍OC中对象的复制。

什么是复制


这里说的复制是copy的翻译,因为复制操作使用了copy这个方法。这里说的复制主要指对象的复制,不包括基本类型值的复制。在OC中我们经常会复制一个对象给另外一个对象,常见的复制是函数中的参数传递。

复制的分类


复制分为浅复制(shallow copy)和深(deep copy)复制。浅复制表示复制对象的引用,对象不会增加一个新的副本,但是它会导致对象的引用计数器加1.深复制表示复制一个新的对象副本,并且把对象内容复制到新对象中,确保二者的内容相同,它不会导致对象的引用计数器加1.接下来我们通过一个简单的代码来演示:
?

NSString *str1 = @"abc";  //str1指向了内容为“abc"的对象,对象的引用计数器为1
NSString *str2 = str1;    //str2也指向了内容为“abc"的对象,对象的其引用计数器加1
NSString *str3 = [str1 mutableCopy];  //str3指向了内容为“abc"的新对象,旧对象的引用计数器为不变



上面的示例代码中通过赋值操作实现了对象的复制操作,这里复制是浅复制;接着通过mutableCopy方法实现了深复制。注意深复制相当于创建了一个新的对象,新对象与旧对象的内容相同。

如何复制对象


常见的复制操作是使用赋值操作符,也就是等号。不过正式的复制操作是通过专门的方法实现的,专门的方法是`copy`和`mutableCopy`。这两个方法都是从NSObject类中继承来的,因此只要是OC提供的类都可以直接使用.比如我们在上面的示例代码中NSString类对象就直接使用了mutableCopy方法实现深复制操作。

属性特性中的复制


我们在上一章回中介绍属性特性时提到过copy,它是内存管理特性中的一个值。如果某个属性的内存管理特性被设置为copy,那么使用setter方法修改该属性时就会调用该属性所属类的copy方法。大家可能不好理解,因此我们举个例子来说明:


    @property (nonatomic,readwrite,copy) NSString *name;
    @property (nonatomic,readwrite,copy) Book* test



在例子中省略了类的声明,只有类中属性的定义,其中name属性的内存管理特性设置为copy,这时会调用name所属类的copy方法,也就是NSString类的copy方法,这是OC提供的类,不方便查看它的copy方法。我们可以自己定义一个类Book,然后在Book类中重写copy方法并且输出log信息,这样就可以查看了。我们会在示例代码中做演示。

?最后我们对本章回的内容做一个总结:

  • 1.复制主要包含浅复制和深复制;
  • 2.复制对象时使用`copy`和`mutableCopy`方法来实现;
  • 3.使用`copy`修饰类的属性时,修改该属性会调用属性所属类的`copy`方法;


看官们,本章回的内容就介绍到这里,欲知后事如何且听下回分解!

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:51:56  更:2021-12-23 15:53:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:33:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码