第08天OC語言(17):Copy基本使用(深淺拷貝)

  • 不要等到明天,明天太遙遠(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;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容