- 不要等到明天,明天太遙遠(yuǎn),今天就行動(dòng)。
須讀:看完該文章你能做什么?
Copy的基本概念
學(xué)習(xí)前:你必須會(huì)什么?(在這里我已經(jīng)默認(rèn)你具備C語言的基礎(chǔ)了)
NSString的基本使用
一、本章筆記
一、Copy
為什么會(huì) 產(chǎn)生一個(gè)新的對(duì)象
拷貝要求 修改原來的對(duì)象不能影響到拷貝出來的對(duì)象
修改拷貝出來的對(duì)象 也不能影響到原來的對(duì)象, 所以需要生成一個(gè)新的對(duì)象
深淺拷貝
如果沒有生成新的對(duì)象, 我們稱之為淺拷貝, 本質(zhì)就是指針拷貝
如果生成了新的對(duì)象, 我們稱之為深拷貝, 本質(zhì)就是會(huì)創(chuàng)建一個(gè)新的對(duì)象
二、code
main.m
#pragma mark 17-Copy基本使用(深淺拷貝)
#pragma mark - 代碼
#import <Foundation/Foundation.h>
#pragma mark 類
#pragma mark - main函數(shù)
int main(int argc, const char * argv[])
{
#pragma 1.不可變字符串 進(jìn)行一個(gè) mutableCopy操作
// 會(huì)生成一個(gè)新的對(duì)象
/*
NSString *str = @"lyh";
// 只要是拷貝出來的對(duì)象,拷貝出來的對(duì)象中的內(nèi)容 和 以前對(duì)象中的內(nèi)容一致
// "一般"情況下 拷貝會(huì)生成一個(gè)新的對(duì)象
// 為什么會(huì) 產(chǎn)生一個(gè)新的對(duì)象 1.因?yàn)榭截愐?修改原來的對(duì)象不能影響到拷貝出來的對(duì)象 \
修改拷貝出來的對(duì)象 也不能影響到原來的對(duì)象, 所以需要生成一個(gè)新的對(duì)象 \
2.由于以前的對(duì)象是一個(gè)不可變的對(duì)象,而通過mutableCopy拷貝出來的對(duì)象必須是一個(gè)可變的對(duì)象,所以必須生成一個(gè)新的對(duì)象
NSMutableString *copyStr = [str mutableCopy];
NSLog(@"str = %@, copyStr = %@",str,copyStr);
NSLog(@"str = %p, copyStr = %p",str,copyStr);
*/
#pragma 2.可變字符串 進(jìn)行一個(gè) mutableCopy操作
// 會(huì)生成一個(gè)新的對(duì)象
/*
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. 可變字符串 進(jìn)行一個(gè) copy
// 會(huì)生成一個(gè)新的對(duì)象
/*
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.如果是通過 不可變對(duì)象調(diào)用了copy , 那么不會(huì)生成一個(gè)新的對(duì)象
// 原因: 因?yàn)樵瓉淼膶?duì)象是不能修改的,拷貝出來的對(duì)象 也是不能修改的
// 既然兩個(gè) 都不能修改, 所以永遠(yuǎn)不能影響到另外一個(gè)對(duì)象, 那么已經(jīng)符合需求
// 所以 : OC為了內(nèi)存進(jìn)行優(yōu)化, 就不會(huì)生成一個(gè)新的對(duì)象
NSString *str = @"lyh";
NSString *copyStr = [str copy];
NSLog(@"str = %p, copyStr = %p",str,copyStr); // 同一個(gè)地址
/*
正式因?yàn)檎{(diào)用copy方法 有時(shí)候 會(huì)生成一個(gè)新的對(duì)象,有時(shí)候不會(huì)生成一個(gè)新的對(duì)象
所以 : 如果沒有生成新的對(duì)象, 我們稱之為淺拷貝, 本質(zhì)就是指針拷貝
如果生成了新的對(duì)象, 我們稱之為深拷貝, 本質(zhì)就是會(huì)創(chuàng)建一個(gè)新的對(duì)象
*/
return 0;
}