美文网首页
内存管理之copy

内存管理之copy

作者: 凌云01 | 来源:发表于2023-12-07 13:56 被阅读0次

iOS提供了2个拷贝方法
1.copy,不可变拷贝,产生不可变副本
2.mutableCopy,可变拷贝,产生可变副本

深拷贝和浅拷贝
1.深拷贝:内容拷贝,产生新的对象
2.浅拷贝:指针拷贝,没有产生新的对象

NSString *str1 = [[NSString alloc] initWithFormat:@"test"];
NSString *str2 = [str1 copy];  // 返回的是NSString, 浅拷贝,指针拷贝,没有产生新对象
NSMutableString *str3 = [str1 mutableCopy];//返回的是NSMutableString,深拷贝,内容拷贝,有产生新对象
NSLog(@"%@ %@ %@", str1, str2, str3);
NSLog(@"%p %p %p", str1, str2, str3);
深拷贝、浅拷贝.png

注释:因为str1是不可变对象,[str1 copy] 返回str2也是不可变对象,两指针指向了同一块内存地址,所以是浅拷贝,[str1 mutableCopy]返回str3是可变对象,如果str3改变,不影响str1,就需要申请一块新的内存地址,所以str1、str3指针指向了不同的内存址,是深拷贝

NSMutableString *str1 = [[NSMutableString alloc] initWithFormat:@"test"];
NSString *str2 = [str1 copy]; // 深拷贝
NSMutableString *str3 = [str1 mutableCopy]; // 深拷贝
深拷贝、浅拷贝.png
注释:因为str1是可变对象,[str1 copy] 返回str2是不可变对象,如果str1改变,不影响str2,就需要申请一块新的内存地址,所以str1、str2指针指向了不同的内存址,是深拷贝,[str1 mutableCopy]返回str3是可变对象,如果str3改变,不影响str1,就需要申请一块新的内存地址,所以str1、str3指针指向了不同的内存址,是深拷贝

copy和mutableCopy

copy和mutableCopy.png

相关文章

  • 内存管理 之 Copy

    1、copy copy的目的:产生一个副本对象,跟源对象互不影响,修改一方时,不会影响另一方。copy分为深拷贝和...

  • 内存管理-copy

    拷贝的作用 拷贝的作用就是为了产生一个副本对象,与原对象互不影响 修改了原对象,不会影响副本对象 修改了副本对象,...

  • 内存管理:Copy

    Copy的目的 copy的目的,是希望能产生一个同样的副本。希望修改副本的时候,不会影响到原来的数据。修改原来的数...

  • 内存管理copy

    01 copy的目的就是为了产生一个新的副本对象,修改副本对象,不会对影响原来的对象IOS提供了两个拷贝方法, c...

  • 内存管理-copy

    copy分两种:copy和mutebleCopy 深拷贝:内容拷贝,生成新的地址浅拷贝:指针拷贝,不会生成新的地址...

  • Lesson 0-1 Objective-C basic

    6.OC 手动内存管理 OC 内存管理原则: 只要使用 alloc, new, copy, mutableCopy...

  • iOS 内存(系统引用的技术)了解

    iOS程序的内存布局 Tagged Pointer OC对象的内存管理 copy和mutableCopy

  • iOS - 内存管理(二)之Copy

    1.前言 阅读本文前请先阅读第一篇《iOS - 内存管理(一)之MRR》,因为部分内容有涉及之前的知识点。本来co...

  • iOS 底层 - 内存管理之copy

    本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗...

  • iOS内存管理之copy mutableCopy

    不可变类型调用copy方法是不可变类型。可变类型调用copy方法会复制出不可变类型。不可变类型调用mutableC...

网友评论

      本文标题:内存管理之copy

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