- 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?
Copy的基本概念
学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)
NSString的基本使用
一、本章笔记
一、Copy
为什么会 产生一个新的对象
拷贝要求 修改原来的对象不能影响到拷贝出来的对象
修改拷贝出来的对象 也不能影响到原来的对象, 所以需要生成一个新的对象
深浅拷贝
如果没有生成新的对象, 我们称之为浅拷贝, 本质就是指针拷贝
如果生成了新的对象, 我们称之为深拷贝, 本质就是会创建一个新的对象
二、code
main.m
#pragma mark 17-Copy基本使用(深浅拷贝)
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#pragma mark - main函数
int main(int argc, const char * argv[])
{
#pragma 1.不可变字符串 进行一个 mutableCopy操作
// 会生成一个新的对象
/*
NSString *str = @"lyh";
// 只要是拷贝出来的对象,拷贝出来的对象中的内容 和 以前对象中的内容一致
// "一般"情况下 拷贝会生成一个新的对象
// 为什么会 产生一个新的对象 1.因为拷贝要求 修改原来的对象不能影响到拷贝出来的对象 \
修改拷贝出来的对象 也不能影响到原来的对象, 所以需要生成一个新的对象 \
2.由于以前的对象是一个不可变的对象,而通过mutableCopy拷贝出来的对象必须是一个可变的对象,所以必须生成一个新的对象
NSMutableString *copyStr = [str mutableCopy];
NSLog(@"str = %@, copyStr = %@",str,copyStr);
NSLog(@"str = %p, copyStr = %p",str,copyStr);
*/
#pragma 2.可变字符串 进行一个 mutableCopy操作
// 会生成一个新的对象
/*
NSMutableString *str = [NSMutableString stringWithFormat:@"lyh"];
NSMutableString *copyStr = [str mutableCopy];
[str appendString:@"c"];
NSLog(@"str = %@, copyStr = %@",str,copyStr);
NSLog(@"str = %p, copyStr = %p",str,copyStr);
*/
#pragma 3. 可变字符串 进行一个 copy
// 会生成一个新的对象
/*
NSMutableString *str = [NSMutableString stringWithFormat:@"lyh"];
NSString *copyStr = [str copy];
[str appendString:@"c"];
NSLog(@"str = %@, copyStr = %@",str,copyStr);
NSLog(@"str = %p, copyStr = %p",str,copyStr);
*/
#pragma 4.如果是通过 不可变对象调用了copy , 那么不会生成一个新的对象
// 原因: 因为原来的对象是不能修改的,拷贝出来的对象 也是不能修改的
// 既然两个 都不能修改, 所以永远不能影响到另外一个对象, 那么已经符合需求
// 所以 : OC为了内存进行优化, 就不会生成一个新的对象
NSString *str = @"lyh";
NSString *copyStr = [str copy];
NSLog(@"str = %p, copyStr = %p",str,copyStr); // 同一个地址
/*
正式因为调用copy方法 有时候 会生成一个新的对象,有时候不会生成一个新的对象
所以 : 如果没有生成新的对象, 我们称之为浅拷贝, 本质就是指针拷贝
如果生成了新的对象, 我们称之为深拷贝, 本质就是会创建一个新的对象
*/
return 0;
}