iOS strong copy關鍵字之深淺拷貝

2021-08-07 15:29:30 字數 1223 閱讀 7803

大家都知道在定義屬性時會使用關鍵字nonatomic,strong,copy,weak,assign,但是關於copy關鍵字到底掌握多少呢,下面這個寫法會有什麼問題嗎?

列印結果:內容相同,記憶體位址是同乙個位址,說明這是指標指向了同一位址而已(這是的copy即是淺拷貝,只是拷貝了指標)

注意:上面這種賦值方法有問題,你發現了嗎?(第二種方法中更改了)

列印結果:

1.我們發現這個時候使用copy關鍵字的字串的記憶體位址更改了(這個copy即是深拷貝,拷貝了內容)

2.在str更改後,strstrong字串內容也改變了,strcopy內容沒有改變,這裡就是為什麼我們要使用copy關鍵字的原因,因為如果使用strong當你傳遞資料過來時,只是傳遞了指標,要是原來的資料不小心進行了更改,會造成傳遞後的資料也更改了,而使用copy關鍵字的資料則不會出現這個問題。

列印結果:

當執行到上圖中的那一句時崩潰了,列印資訊如下圖

因為copy出來的仍然是不可變字元!如果使用nsmutablestring的方法,就會崩潰。文章開始的時候那個問題的答案就在這裡了。

1、關於strong和copy的選擇,一般strong和copy是一樣的,但是當你覺得這個值在傳遞後有可能會更改,那麼最好使用copy。

2、對於copy的使用情況,nsarray,nsdictionary同樣適用

3、對於使用copy關鍵字的資料型別,不要定義為可變資料型別(會被罵的)

能力有限,有什麼不對的地方望批評指正

ios **:深.淺拷貝與copy.strong

ios nsstring到底使用copy還是使用strong屬性,有什麼區別

Codeup關鍵路徑 關鍵路徑

時間限制 1 sec 記憶體限制 128 mb 提交 261 解決 90 提交 狀態 討論版 命題人 外部匯入 描述 圖的連線邊上的資料表示其權值,帶權值的圖稱作網。上圖可描述為頂點集為 a,b,c,d,e 邊集及其權值為 始點,終點 權值 a b 3 a c 2 b d 5 c d 7 c e 4...

new關鍵字 this關鍵字 base關鍵字

使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...

this關鍵字 static關鍵字

1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...