copy 和 mutablecopy 笔记
NSString *a = [[NSString alloc]initWithString:@"hello"];
NSString *b = [a copy];
NSLog(@"%d %d",a.retainCount, b.retainCount);// 2,2
NSMutableString *f = [a mutableCopy];
NSLog(@"%d %d",a.retainCount, f.retainCount);// 2,1
[f appendString:@"dd"];
NSLog(@"%@,%@",a,f);// hello,hellodd
// 对于一个不可变对象来说 copy 是浅copy 只是指针复制 其retainCount 1
// mutablecopy 是深copy 是对象复制
NSMutableString *c = [[NSMutableString alloc]initWithString:@"hello"];
NSMutableString *d = [c copy];
NSLog(@"%d %d",c.retainCount,d.retainCount);// 1,1
// [d appendString:@"ddd"]; //error 因为copy返回一个不可改变对象
NSMutableString *e = [c mutableCopy];
NSLog(@"%d %d",c.retainCount,e.retainCount);// 1,1
[e appendString:@"dddd"];
NSLog(@"%@,%@",c,e);// hello,hellodddd
// 对于可变对象来说 copy 和mutablecopy 都是深copy 都是拷贝对象 不过copy返回的对象是一个不可变对象
//------------------------------------------------------------//
// 对于系统容器类对象
NSArray *array1 = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
NSArray *array1Copy = [array1 copy];
NSLog(@"%d, %d",array1.retainCount,array1Copy.retainCount);//2,2
NSMutableArray *arrayMcopy = [array1 mutableCopy];
NSLog(@"%d, %d",array1.retainCount,arrayMcopy.retainCount);//2,1
[arrayMcopy removeObjectAtIndex:0];
[arrayMcopy addObject:@"d"];
NSLog(@"%@-----%@",array1,arrayMcopy);//a,b,c -----b,c,d
NSArray *mArray1 = [NSArray arrayWithObjects:[NSMutableString stringWithString:@"a"],@"b",@"c",nil];
NSArray *mArray1copy = [mArray1 copy];
NSLog(@"%d,%d",mArray1.retainCount,mArray1copy.retainCount);//2,2
NSMutableArray *mArrayMcopy = [mArray1 mutableCopy];
NSLog(@"%d,%d",mArray1.retainCount,mArrayMcopy.retainCount);//2,1
NSMutableString *temp = [mArray1 objectAtIndex:0];
NSLog(@"%@",temp);//a
[temp appendString:@"aa"];
NSLog(@"%@",mArray1);//aaa b c
NSLog(@"%@",mArray1copy); //aaa b c
NSLog(@"%@",mArrayMcopy);// aaa b c
//对于容器而言,其元素对象始终是指针复制。如果需要元素对象也是对象复制,就需要实现深拷贝。
NSArray* trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:
[NSKeyedArchiver archivedDataWithRootObject: mArray1]];
NSMutableString *temp2 = [trueDeepCopyArray objectAtIndex:0];
[temp2 appendString:@"aa"];
NSLog(@"%@",mArray1);//aaa b c
NSLog(@"%@",trueDeepCopyArray);//aaaaa b c
//trueDeepCopyArray是完全意义上的深拷贝
转载于:https://www.cnblogs.com/chengxianghe/p/4305036.html
copy 和 mutablecopy 笔记相关推荐
- IOS学习笔记十八(copy、mutableCopy、NSCopying、NSMutableCopy、深复制、浅复制)
1. copy.mutableCopy方法 copy方法返回对象的不可修改的副本 mutableCopy方法返回的对象可修改的副本 1).测试demo int main(int argc, char ...
- [Objective-C] Copy 和 MutableCopy
看了几篇文章,因为文章很新手向,所以内容很繁琐.故整理一下重点,写了测试程序去了解几个知识点,不讨论基本概念.新博客wossoneri.com传送门 非集合类对象的copy与mutableCopy / ...
- strong、copy和mutableCopy详解
写在前面 关于copy.mutableCopy和strong,一直想好好整理整理,但是因为各种原因搁置了.今天上班时发现老代码中因为这个问题出现了一个特别恶心的大坑,让我下定决心写下这篇博文.如果你认 ...
- copy与mutableCopy的内存管理剖析
title: copy与mutableCopy的内存管理剖析 date: 2016-04-24 16:50:04 tags: copy copy与mutableCopy相关的内存管理 不知道为什么一说 ...
- 深浅拷贝的应用-copy、mutableCopy
ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIViewController //如果想让li ...
- copy和mutableCopy都是浅拷贝!!!
嗯,标题就是要这么醒目,不然没人看.虽然要追求醒目,但绝不是信口开河.所有系统容器类的copy或mutableCopy方法,都是浅拷贝!!! 是的,你没有听错. 所有系统容器类的copy或mutabl ...
- copy 和 mutableCopy的区别
1.字符串拷贝 copy 浅拷贝,不拷贝对象本身,仅仅是拷贝指向对象的指针. NSString *str1 = @"qqq";NSString *str2 = [str1 copy ...
- 关于oc的学习笔记 -copy和mutableCopy
简单点来说的话copy就是复制一个不可以变的类型,mutableCopy复制一个可变的对象 举例子 NSString *str = @"fikk"; NSMutableString ...
- Copy 与MutableCopy的区别
NSString *string = @"origion"; NSString *stringCopy = [string copy]; NSMutableString *stri ...
最新文章
- deconv--反褶积和多项式除法
- ArrayUtils使用详解
- js实现对象完美克隆
- 浅谈Java锁,与JUC的常用类,集合安全类,常用辅助类,读写锁,阻塞队列,线程池,ForkJoin,volatile,单例模式不安全,CAS,各种锁
- svn之迁移代码技巧
- HDU2277_变色球
- java 获取插入数据的自增长id
- javax.servlet.ServletException: Circular view path []: would dispatch back to the current....
- 贪心法——区间覆盖问题
- spring test教程
- python程序开机自启动_Linux下Python脚本自启动和定时启动的详细步骤
- Nagios监控HP硬件状态
- 如何在 macOS 中将用户帐户拆分为两个单独的帐户?
- Linux文件系统管理
- 机器人操作系统——ROS,Robot Operating System
- [NOIp2017 TG Day1 T1] 小凯的疑惑
- 生成验证码易语言代码
- 二分算法:数的三次方根
- excel怎么合并同类项数据并求和(去除重复项)
- mysql simpleconsumer_SimpleMessageListenerContainer:Consumer raised exception
热门文章
- 如何设置夜览模式,减少 iPhone 上面的蓝光,减少眼睛的负担
- 应用程序无法正常启动(0xc0000142)。请单击‘确认’关闭应用程序
- 使用NNO区域进行色偏检测
- 计算机网络里的DHCP是什么,DHCP是什么意思?DHCP基础知识介绍
- 股份授权证明(DPOS)概述
- SPGridView 研究笔记 Part 1 - 基础和项菜单
- WPF 控件学习 之 容器控件
- 【6年开源路】海王星给你好看!FineUI v4.0正式版暨《FineUI3to4一键升级工具》发布!
- IOException parsing XML document from ServletContext resource
- 手机进水怎么办?3种补救措施要知道,既然已经发生就要减少损失