iOS strong和copy 詳細解讀

2022-04-29 06:18:09 字數 1042 閱讀 8018

strong和copy是常用到的修飾符,那麼什麼時候用strong,什麼時候用copy,先上一段**再說(以下**直接在viewcontroller中寫);

先定義兩個陣列

///

strong

@property (nonatomic,strong) nsarray *arraystrong;

///copy

@property (nonatomic,copy) nsarray *arraycopy;

viewdidload方法

- (void

)viewdidload

列印結果

可以看到arraystrong隨著arraymut的改變而改變了,而arraycopy沒有隨著arraymut的改變而改變;原因是因為用strong來修飾時,賦值時並沒有建立新的空間,由列印的位址可以看到指向的是同乙個指標的記憶體空間,而用copy時,建立了新的記憶體空間,沒有和arraymut指向同乙個位址; 但是還有乙個問題,往 ↓ 看:

當我把self改成下劃線_去引用變數時:

- (void

)viewdidload

列印結果:

這是因為用self引用時,呼叫了自身的get set方法,也就是因為這樣,才實現了strong和copy的不同,而直接用_是沒有執行get set 方法的,所以兩個陣列的值是一樣的;所以一般在專案中,全部使用self比較好,個人認為,有誤還請指出。

iOS strong 和 assign的區別

ios中的oc是一門物件導向的編輯語言,每乙個物件都是類的例項,在oc中每乙個物件都有乙個名為isa的指標,指向該物件的類。所有nsobject是乙個包含isa指標的結構體。1 assign 和 weak 一樣是乙個弱引用 2 strong是強引用 弱引用和強引用在引用的過程中最重要的是引起記憶體的...

retain和copy的區別

當手動進行記憶體管理時,對於 物件,在 方法中可以使用 對於普通 物件使用 對於 使用 retain 使當前物件的引用計數 1,在 物件中使用 copy 建立乙個物件副本,和呼叫 方法的物件不是同乙個,常常在 中使用 深複製 mutablecopy 深拷貝為物件拷貝,原來的物件計數器不變。淺複製 淺...

assign retain和copy的區別

一 assign屬性 當資料型別為int float等原生型別時,可以使用assign,否則可能導致記憶體洩露。例如當使用malloc分配了一塊記憶體,並把它的位址賦值給了指標a,後來如果希望指標b也共享這塊記憶體,於是講a賦值給 assgin b。這時就用到了assgin,此時a和b指向同一塊記憶...