iOS copy 關鍵字的使用

2021-08-20 12:37:05 字數 1010 閱讀 2811

ios 開發中 copy 關鍵字的使用

在ios開發中,一般copy關鍵字用在nsstring、nsarray、nsdictionary等屬性欄位的修飾符。

為什麼上述屬性需要使用copy修飾呢?原因是上述屬性都有可變的子類,如 nsstring->nsmutablestring、nsarray->nsmutablearray、nsdictionary->nsmutabledictionary;根據面相物件的多型特性,nsstring型別的變數可以指向nsmutablestring型別的變數。宣告物件的屬性一般都是希望明確知道物件的值,但是如果對子類是可變型別的屬性使用strong修飾的話,可能會在物件不知情的情況下修改物件屬性的值,這肯定是物件不願意看到的,示例**如下:

圖一

圖一所示為建立的測試模型,有三個屬性,用strong修飾,下圖是對模型屬性賦值,進行列印的結果

從上邊列印結果可以看出,物件的屬性在不知情的情況下,內容已經被改變了,這會造成在訪問這個物件的時候,屬性值不正確的問題,嚴重的會導致程式崩潰(取陣列的下標越界)。

如果使用copy修飾就不會有問題,示例**如下:

只是改變了屬性的修飾符,把strong改為了copy,列印結果如下:

從上圖可以看到,改為copy後,物件的屬性值,沒有因為可變物件值的改變而改變,這正是物件想要的。

所以,屬性的修飾符使用copy還是strong,取決於修飾的型別是否有可變型別的子類。

ios copy關鍵字的使用

copy關鍵字的使用 平時我們使用物件之間的傳值都是採用retain count 1的方式,這種方式的適用於當物件的某屬性的值改變時,引用該物件的不同指標會同時改變,因為這兩個指標指向的是同乙個記憶體位址,但如果需求是,當乙個指標執行的物件屬性值發生改變時,不影響另乙個物件,那麼需要分配兩個不同的記...

this關鍵字使用

一,表示類中屬性 1,沒有使用this的情況 class person public string getinfo public class thisdemo01 執行結果 姓名 null,年齡 0 可以得出結論 此時並沒有正確將內容賦給屬性 假設身邊有乙隻筆,遠處也有乙隻筆,肯定會就近拿身邊的筆。...

this關鍵字的使用

我們曾經曰 起名字要做到見名知意。this 是當前類的物件引用。簡單的記,它就代表當前類的乙個物件。注意 誰呼叫這個方法,在該方法內部的this就代表誰。this的場景 解決區域性變數隱藏成員變數 定義學生類 class student 姓名設定值 public void setname strin...