NSString到底是用copy還是用strong

2021-08-20 21:08:42 字數 916 閱讀 7449

本質上來講,copy和strong都沒有錯,但是對於追求效能的乙個碼農來講他會再適當的地方用適當的修飾符

那麼,什麼時候用copy,什麼時候用strong呢?

首先,為什麼要用copy?

因為copy安全!

copy修飾的nsstring,在初始化時,如果**是nsmutablestring的話,會對**進行一次深拷貝,將**的記憶體位址複製乙份,這樣,兩個物件就一點關係就沒有了,無論你怎麼操作**,都不會對自己的nsstring有任何影響

那麼問題來了,既然copy安全,那為什麼不都用copy?

這裡我們需要了解一點,copy修飾的nsstring在進行set操作時,底層是這樣實現的:

我們還是舉上面那個例子,進行str = sourcestr操作時,內部會執行乙個操作:

str = [sourcestr copy];

那麼這個copy裡面做了什麼呢?

if ([str ismemberofclass:[str class]])

沒錯,就是進行一次判斷,判斷**是可變的還是不可變的,如果是不可變,那麼好,接下來的操作就跟strong修飾的沒有區別,進行淺拷貝;如果是可變的,那麼會進行一次深拷貝

那麼回到最初的問題,什麼時候用copy,什麼時候用strong

你只需要記住一點,當你給你的的nsstring物件賦值時,如果**是nsmutablestring,那麼這種情況就必須要用copy;如果你確定**是不可變型別的,比如@""這種固定的字串,那麼用strong比較好

this到底是誰

js中函式的4種呼叫方式 1.作為普通函式來呼叫 alert window.xx undefined function t t alert window.xx 333 解釋 作為普通函式來呼叫this時,this的值指向 windwo,準確的說,this為null,但被解釋成window,在ecma...

Segmentation fault到底是何方妖孽

那麼對於任何沒有經過 mmu對映過的虛擬空間的位址,不管程序是執行寫操作還是讀操作,作業系統都會捕捉到這個錯誤的非法訪問,然後輸出乙個 segmetation fault 的錯誤提示資訊並強行終止程序。程式之所以會時不時的出現 segmetation fault 的根本原因是程序訪問到了沒有訪問許可...

孔子到底是誰?

提起孔子,想必中國人都知道,甚至比熟悉人民幣還熟悉他。因為對他的炒作已經延續了幾千年,使得這位山東大漢紅的發紫,但孔子到底是誰呢,擁有這麼大的魔力,在中華幾千年文化中處處留下他的烙印,使得 孔子門 經得起千年歲月的沖刷,依然濤聲依舊。其實孔子是被歷代帝王捧紅的,也就是說,孔子是中國被炒作最厲害的人物...