OC深复制和浅复制
来源:互联网 发布:特别搞笑的网络歌曲 编辑:程序博客网 时间:2024/05/19 14:40
//拷贝设计的原则:保证原来的对象不会被改变
//深复制(深拷贝):产生了新的对象,
//举例1:NSMutableString可变对象不管使用copy或者是mutableCopy都会产生新的对象
//举例2:NSString不可变对象,使用mutableCopy会产生新的对象,使用copy不会产生新的对象
//总结:只有不可变对象使用copy才不会产生新的对象,其他都会产生新的对象;也即只要带有 mutable的都会会产生新的对象
//浅复制(浅拷贝):没产生新的对象,只是产生一个新的指针指向原来的内存
//注意:要使用copy和mutableCopy需要实现NSCoping协议
//浅拷贝:不可变对象使用copy(不可变拷贝),不会产生新的对象
//深拷贝:浅拷贝剩下的情况:带有mutable
//拷贝之后是否可变:只有 可变的对象的可变拷贝
//NSMutableString mutableCopy
代码段:
// NSString *str1 = @”123”;
// NSLog(@”str1 = %p”,str1);
//
// //(1)不可变对象的copy(指针拷贝,浅拷贝),产生的对象不可变
// NSString *str2 = [str1 copy];
// NSLog(@”str2 = %p”,str2);
//
// //(2)不可变对象的mutableCopy(mutableCopy一定会产生新的对象)会产生一个不可变的新的对象:深拷贝
//
// NSString *str3 = [str1 mutableCopy];
// NSLog(@”str3 = %p”,str3);
//
//
//2.可变对象的copy与mutableCopy NSMutableString *mstr1 = [[NSMutableString alloc]initWithUTF8String:"abc"]; NSLog(@"mstr1 = %p",mstr1);
// //(1)可变对象的copy,也会产生新的对象,但是该对象不可变(深拷贝)
//
// NSMutableString *mstr2 = [mstr1 copy];
// NSLog(@”mstr2 = %p”,mstr2);
// //不可变字符串不能直接追加
// //[mstr2 appendString:@”123”];
//
// //isKindOfClass判断一个对象是否是参数这个类的实例及其子类的实例
// if ([mstr2 isKindOfClass:[NSMutableString class]]) {
// NSLog(@”是NSMutableString的实例!”);
// }
// else
// {
// NSLog(@”不是其实例或者其子类的实例!”);
// }
//(2)可变对象的mutableCopy(深拷贝)产生一个可变的新的对象 NSMutableString *mstr3 = [mstr1 mutableCopy]; [mstr3 appendString:@"12345!"]; NSLog(@"str3 = %@",mstr3);
- OC 浅复制和深复制
- OC深复制和浅复制
- OC 中深复制 和浅复制 详解
- OC深,浅复制
- oc 中的浅复制与深复制
- OC中的深复制与浅复制
- OC- 属性 深复制、浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 浅复制和深复制
- 浅复制和深复制
- 0126 Flume-ng+Kafka+storm的学习笔记
- iOS 9检测QQ、微信是否安装无效的解决方法
- 页面按F5刷新,避免表单重复提交的解决方法
- log4j.properties
- 插入排序
- OC深复制和浅复制
- 使用myeclipse web browser 中文显示乱码
- Session对象的特点
- Android系统启动过程
- WPF 让Border显示外阴影
- Message解析
- ListView原理分析之重要方法介绍
- Haskell : Functionally Solving Problems 部分学习笔记
- Linux非法ip通过脚本执行定时任务加入防火墙