Copy & MutableCopy
2016-05-20 15:20
387 查看
使用copy或mutableCopy方法可以创建一个对象的副本
copy
需要实现NSCoppying协议
创建的是不可变副本(如NSString、NSArray、NSDictionary)
mutableCopy
需要先实现NSMutableCopying协议
创建的是可变副本(如NSMutableString、NSMutableArray、NSMutableDictionary)
Copy的目的是建立副本,同时修改原始对象和复本不会互相干扰。
深复制 & 浅复制
深复制:
内容拷贝,源对象和副本指向的是不同的两个对象
源对象引用计数器不变,副本计数器设置为1
浅复制:
指针拷贝,源对象和副本指向的是同一个对象
对象的引用计数器+1,其实相当于做了一次retain操作
只有不可变对象创建不可变副本(copy)才是浅复制,其他都是深复制。
自定义对象的copyWithZone
copy
需要实现NSCoppying协议
创建的是不可变副本(如NSString、NSArray、NSDictionary)
mutableCopy
需要先实现NSMutableCopying协议
创建的是可变副本(如NSMutableString、NSMutableArray、NSMutableDictionary)
Copy的目的是建立副本,同时修改原始对象和复本不会互相干扰。
深复制 & 浅复制
深复制:
内容拷贝,源对象和副本指向的是不同的两个对象
源对象引用计数器不变,副本计数器设置为1
浅复制:
指针拷贝,源对象和副本指向的是同一个对象
对象的引用计数器+1,其实相当于做了一次retain操作
只有不可变对象创建不可变副本(copy)才是浅复制,其他都是深复制。
自定义对象的copyWithZone
- (id)copyWithZone:(NSZone *)zone { Person *p = [[[self class] allocWithZone:zone] init]; p.name = self.name; p.age = self.age; return p; }
相关文章推荐
- Tomcat调优总结
- tomcat的connector与container原理分析(二)
- centos 下面修改mysql的root密码
- Citrix Supportability Pack介绍
- setsockopt()用法(参数详细说明)
- Docker
- 在linux中使用mingw为64位windows交叉编译程序
- Nginx负载均衡+tomcat+session共享
- OpenWrt目录结构
- linux cron计划任务
- apache lucene core
- Hadoop各商业发行版之比较
- Centos7下LNMP安装log4php,phpunit
- 找到bashrc
- Apache和PHP的优化
- Linux系统下安装Apache2.4+Mysql5.7+PHP7+Perl(小白装lampp一)
- nginx+tocmat 负载均衡时,一台tomcat宕机时,如何快速切换到其他tomcat
- linux定时任务crontab设置
- org.apache.log4j.Logger详解
- 操作系统知识(6)--Shell初探